Changes to an attribute of the iOS monitoring control: observeValueForKeyPath, valueforkeypath
Create a test UIButton
# Import "ViewController. h "@ interface ViewController () @ property (nonatomic, strong) UIButton * button; @ end @ implementation ViewController-(void) viewDidLoad {[super viewDidLoad]; self. button = [[UIButton alloc] initWithFrame: CGRectMake (30, 50, 50, 30)]; [self. button setTitle: @ "test" forState: UIControlStateNormal]; [self. button setTitleColor: [UIColor blackColor] forState: UIControlStateNormal]; self. button. layer. borderWidth = 1.0f; [self. view addSubview: self. button]; // register the enabled status of the listener button [self. button addObserver: self forKeyPath: @ "enabled" options: encontext: @ "test_button"]; // change the enabled status of the current button after 3 seconds dispatch_after (dispatch_time (DISPATCH_TIME_NOW, (int64_t) (3.0f * NSEC_PER_SEC), dispatch_get_main_queue (), ^ {self. button. enabled = YES ;});}
Add listener observer
/*** Method for changing the listener button status ** @ param keyPath ** @ param object ** @ param change changed data * @ param context when the listener is registered passed value */-(void) observeValueForKeyPath :( NSString *) keyPath ofObject :( id) object change :( NSDictionary *) change context :( void *) context {UIButton * button = (UIButton *) object; if (self. button = button & [@ "enabled" isEqualToString: keyPath]) {NSLog (@ "self. the enabled attribute of the button has changed % @ ", [change objectForKey: @" new "]);}
Log output
11:48:32. 001 listening for a widget attribute change [34212: 570638] The enabled attribute of self. button has changed 1
If you did not see this article in wb145230, click to view the original article.