用KVO监听控件属性的改变(observeValueForKeyPath)

创建一个测试的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:@"测试" forState:UIControlStateNormal];
    [self.button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    self.button.layer.borderWidth = 1.0f;
    [self.view addSubview:self.button];
//注册监听button的enabled状态
    [self.button addObserver:self forKeyPath:@"enabled" options:NSKeyValueObservingOptionNew context:@"test_button"];

    //  3秒钟后改变当前button的enabled状态
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.button.enabled = YES;
    });
}

添加监听观察者

/**
 *  监听按钮状态改变的方法
 *
 *  @param keyPath 按钮改变的属性
 *  @param object  按钮
 *  @param change  改变后的数据
 *  @param context 注册监听时context传递过来的值
 */
-(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.button的enabled属性改变了%@",[change objectForKey:@"new"]);
    }
}
时间: 2024-07-30 08:00:53

用KVO监听控件属性的改变(observeValueForKeyPath)的相关文章

[iOS 技巧 -11] 监听控件的一些情况 所采取的方法

//监听控件的一些情况:1.addtaget 2.设置代理(常见事件) 3.通知(控件发出通知)

java 事件监听 - 控件

java 事件监听 //事件监听 //事件监听,写了一个小案例,点击按钮改变面板的颜色. import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Index extends JFrame implements ActionListener{ //设置面板 Wdmb wdmb = new Wdmb(); //设置按钮 JButton anniu1 = new JButton("黄色");

KVO监听

Main.m #import "Children.h" #import "Nurse.h" int main(int argc, const char * argv[]) { Children *children = [[Children alloc] init]; Nurse *nurse = [[Nurse alloc] initWithChildren:children]; [[NSRunLoop currentRunLoop] run]; [children

UITextField控件属性

UITextField控件属性: enablesReturnKeyAutomatically 默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. 1.borderStyle 设置边框样式,只有设置了才会显示边框样式 text.borderStyle = UITextBorderStyleRoundedRect; typedef enum { UITextBorderStyleNone, UITextBorderStyleLine, UITextBo

UISwitch控件属性

UISwitch控件属性: 1. onTintColor 处于on时switch 的颜色 switchImage.onTintColor = [UIColor grayColor]; 2.tintColor 处于off时switch 的颜色 switchImage.tintColor = [UIColor greenColor]; 3.onImage 设置on 的图标 switchImage.onImage = [UIImage imageNamed:@"1.png"]; 4. off

IOS基本控件属性

基本控件属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 一.控

iOS: 使用KVO监听控制器中数组的变化

一.介绍: KVO是一种能动态监听到属性值的改变的方式,使用场景非常广泛,这里我只讲如何监听控制器ViewController中数组的变化. 二.了解: 首先我们应该知道KVO是不能直接监听控制器ViewController数组的变化的,需要将数组定义在模型中,然后控制器ViewController持有模型对象,通过该对象才能监听. 三.步骤: <1>在控制器ViewController类中定义一个模型类Model,并在该类中声明一个可变的数组属性modelArray并进行懒加载,其实它最终就

控件属性设置

控件属性设置 XIB中设置UILabel文字居中 选中位于视图下方的Label对象,单击检视面板选择条中的Attributes Inspector图标,打开属性面板.在属性面板中找到标题为Alignment的分段控件(seg-mented control).选择中间的那个选项(居中对齐),如图所示. 改变按钮的背景颜色 在属性检视面板中向下滚动,会看到View标题下方的属性.在Background标签右侧,点击颜色面板(白色方块,上面有一条红色的斜线)可以打开颜色拾取器.

第三篇:属性_第一节:控件属性与属性的持久化

一.控件属性 首先,属性是各种.net语言的基本语法.而我们常说的控件属性是指控件类中用public修饰的属性. 见Lable的Text属性: [Bindable(true), DefaultValue(""), Localizable(true), PersistenceMode(PersistenceMode.InnerDefaultProperty), WebCategory("Appearance"), WebSysDescription("Lab