Просмотр исходного кода

Change BOOL ivars and properties immediately when the switch is toggled.

Don’t require the “Set” button to be pressed (hide it so there’s no confusion).
Ryan Olson лет назад: 12
Родитель
Сommit
556dd1892a

+ 15 - 1
Classes/Editing/FLEXIvarEditorViewController.m

@@ -11,8 +11,9 @@
 #import "FLEXRuntimeUtility.h"
 #import "FLEXRuntimeUtility.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputViewFactory.h"
 #import "FLEXArgumentInputViewFactory.h"
+#import "FLEXArgumentInputSwitchView.h"
 
 
-@interface FLEXIvarEditorViewController ()
+@interface FLEXIvarEditorViewController () <FLEXArgumentInputViewDelegate>
 
 
 @property (nonatomic, assign) Ivar ivar;
 @property (nonatomic, assign) Ivar ivar;
 
 
@@ -40,7 +41,13 @@
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target];
     inputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target];
+    inputView.delegate = self;
     self.fieldEditorView.argumentInputViews = @[inputView];
     self.fieldEditorView.argumentInputViews = @[inputView];
+    
+    // Don't show a "set" button for switches. Set the ivar when the switch toggles.
+    if ([inputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) {
+        self.navigationItem.rightBarButtonItem = nil;
+    }
 }
 }
 
 
 - (void)actionButtonPressed:(id)sender
 - (void)actionButtonPressed:(id)sender
@@ -51,6 +58,13 @@
     self.firstInputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target];
     self.firstInputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target];
 }
 }
 
 
+- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView
+{
+    if ([argumentInputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) {
+        [self actionButtonPressed:nil];
+    }
+}
+
 + (BOOL)canEditIvar:(Ivar)ivar currentValue:(id)value
 + (BOOL)canEditIvar:(Ivar)ivar currentValue:(id)value
 {
 {
     return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:ivar_getTypeEncoding(ivar) currentValue:value];
     return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:ivar_getTypeEncoding(ivar) currentValue:value];

+ 15 - 1
Classes/Editing/FLEXPropertyEditorViewController.m

@@ -11,8 +11,9 @@
 #import "FLEXFieldEditorView.h"
 #import "FLEXFieldEditorView.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputViewFactory.h"
 #import "FLEXArgumentInputViewFactory.h"
+#import "FLEXArgumentInputSwitchView.h"
 
 
-@interface FLEXPropertyEditorViewController ()
+@interface FLEXPropertyEditorViewController () <FLEXArgumentInputViewDelegate>
 
 
 @property (nonatomic, assign) objc_property_t property;
 @property (nonatomic, assign) objc_property_t property;
 
 
@@ -43,7 +44,13 @@
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target];
     inputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target];
+    inputView.delegate = self;
     self.fieldEditorView.argumentInputViews = @[inputView];
     self.fieldEditorView.argumentInputViews = @[inputView];
+    
+    // Don't show a "set" button for switches - just call the setter immediately after the switch toggles.
+    if ([inputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) {
+        self.navigationItem.rightBarButtonItem = nil;
+    }
 }
 }
 
 
 - (void)actionButtonPressed:(id)sender
 - (void)actionButtonPressed:(id)sender
@@ -58,6 +65,13 @@
     self.firstInputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target];
     self.firstInputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target];
 }
 }
 
 
+- (void)argumentInputViewValueDidChange:(FLEXArgumentInputView *)argumentInputView
+{
+    if ([argumentInputView isKindOfClass:[FLEXArgumentInputSwitchView class]]) {
+        [self actionButtonPressed:nil];
+    }
+}
+
 + (BOOL)canEditProperty:(objc_property_t)property currentValue:(id)value
 + (BOOL)canEditProperty:(objc_property_t)property currentValue:(id)value
 {
 {
     const char *typeEncoding = [[FLEXRuntimeUtility typeEncodingForProperty:property] UTF8String];
     const char *typeEncoding = [[FLEXRuntimeUtility typeEncodingForProperty:property] UTF8String];