瀏覽代碼

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 年之前
父節點
當前提交
556dd1892a
共有 2 個文件被更改,包括 30 次插入2 次删除
  1. 15 1
      Classes/Editing/FLEXIvarEditorViewController.m
  2. 15 1
      Classes/Editing/FLEXPropertyEditorViewController.m

+ 15 - 1
Classes/Editing/FLEXIvarEditorViewController.m

@@ -11,8 +11,9 @@
 #import "FLEXRuntimeUtility.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputViewFactory.h"
+#import "FLEXArgumentInputSwitchView.h"
 
-@interface FLEXIvarEditorViewController ()
+@interface FLEXIvarEditorViewController () <FLEXArgumentInputViewDelegate>
 
 @property (nonatomic, assign) Ivar ivar;
 
@@ -40,7 +41,13 @@
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.inputValue = [FLEXRuntimeUtility valueForIvar:self.ivar onObject:self.target];
+    inputView.delegate = self;
     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
@@ -51,6 +58,13 @@
     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
 {
     return [FLEXArgumentInputViewFactory canEditFieldWithTypeEncoding:ivar_getTypeEncoding(ivar) currentValue:value];

+ 15 - 1
Classes/Editing/FLEXPropertyEditorViewController.m

@@ -11,8 +11,9 @@
 #import "FLEXFieldEditorView.h"
 #import "FLEXArgumentInputView.h"
 #import "FLEXArgumentInputViewFactory.h"
+#import "FLEXArgumentInputSwitchView.h"
 
-@interface FLEXPropertyEditorViewController ()
+@interface FLEXPropertyEditorViewController () <FLEXArgumentInputViewDelegate>
 
 @property (nonatomic, assign) objc_property_t property;
 
@@ -43,7 +44,13 @@
     inputView.backgroundColor = self.view.backgroundColor;
     inputView.targetSize = FLEXArgumentInputViewSizeLarge;
     inputView.inputValue = [FLEXRuntimeUtility valueForProperty:self.property onObject:self.target];
+    inputView.delegate = self;
     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
@@ -58,6 +65,13 @@
     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
 {
     const char *typeEncoding = [[FLEXRuntimeUtility typeEncodingForProperty:property] UTF8String];