在实际开发中,很多的时候是需要手动写代码来创建按钮的。
在开发过程中,并不是每次都通过storyboard拖控件完成UI界面,因为storyboard上面的界面是“固定死”的,有时候可能会在程序运行过程中动态地添加一些新的控件到界面上,比如QQ,微信的聊天信息,是有人发出一条信息后才动态显示出来的。因此,需要掌握如何用代码动态地添加控件。实际上,storyboard的本质就是根据图形界面描述转成相应的代码(xml 文件)。还有一个原因,就是有的国内的公司,或者一些 IOS 开发的团队,并不使用故事板进行 UI 设计,所以掌握是很有必要的。
// 1.创建一个自定义的按钮 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // 2.添加按钮 [self.view addSubview:btn]; // 3.设置按钮的位置和尺寸 btn.frame = CGRectMake(100, 100, 100, 100); // 4.监听按钮点击(点击按钮后就会调用self的btnClick方法) [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside]; // 5.设置按钮在默认状态下的属性 // 5.1.默认状态的背景 [btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal]; // 5.2.默认状态的文字 [btn setTitle:@"点我啊" forState:UIControlStateNormal]; // 5.3.默认状态的文字颜色 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; // 6.设置按钮在高亮状态下的属性 // 6.1.高亮状态的背景 [btn setBackgroundImage:[UIImage imageNamed:@"btn_02"] forState:UIControlStateHighlighted]; // 6.2.高亮状态的文字 [btn setTitle:@"摸我干啥" forState:UIControlStateHighlighted]; // 6.3.高亮状态的文字颜色 [btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
UIImage *image = [UIImage imageNamed:@"btn_01"];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[self.view addSubview:btn];
按钮代码提交到了视图里。显示
//视图加载完成需要调用的方法,继承的方法,需要调用父类的这个方法,千万不能丢 //通常视图控制器的初始化工作,都在这里执行 - (void)viewDidLoad{ [super viewDidLoad]; //创建按钮 UIButton *btn = [[UIButton alloc] init]; btn.frame = CGRectMake(30, 30, 200, 200); btn.backgroundColor = [UIColor redColor]; [self.view addSubview:btn]; [btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside]; } - (void)click:(id)sender { NSLog(@"ddd"); }
addTarget进行监听设置,等价于故事板里的方法的连线,IBAction。如果是控件属性的连线,也就是 IBOutlet,直接赋值即可。
使用代码创建控件的步骤如下:
1> 使用控件对应类创建对象
2> 设置对象属性:frame\color\text\image\backgroundImage……
3> [self.view addSubview:btn];将控件添加到视图
设置控件监听方法的示例代码如下:
[btn addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
提示:
1> addTarget方法定义在UIControl类中,这意味着可以给所有继承自UIControl类的对象添加监听方法
2> 监听方法的第一个参数就是对象本身
3> 监听方法的第二个参数是监听控件的事件
viewDidLoad是视图加载完成后调用的方法,通常在此方法中执行视图控制器的初始化工作,在viewDidLoad方法中,一定不要忘记调用父类的方法实现!
[super viewDidLoad];