在实际开发中,很多的时候是需要手动写代码来创建按钮的。
在开发过程中,并不是每次都通过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];
一个UIColor代表一种颜色,通过UIColor的类方法,可以获得很多常用的颜色
+ (UIColor *)blackColor; // 0.0 white 黑色
+ (UIColor *)darkGrayColor; // 0.333 white 深灰色
+ (UIColor *)lightGrayColor; // 0.667 white 亮灰色
+ (UIColor *)whiteColor; // 1.0 white 白色
+ (UIColor *)grayColor; // 0.5 white 灰色
+ (UIColor *)redColor; // 1.0, 0.0, 0.0 RGB 红色
+ (UIColor *)greenColor; // 0.0, 1.0, 0.0 RGB 绿色
+ (UIColor *)blueColor; // 0.0, 0.0, 1.0 RGB 蓝色
+ (UIColor *)cyanColor; // 0.0, 1.0, 1.0 RGB 青色
+ (UIColor *)yellowColor; // 1.0, 1.0, 0.0 RGB 黄色
+ (UIColor *)magentaColor; // 1.0, 0.0, 1.0 RGB 品红
+ (UIColor *)orangeColor; // 1.0, 0.5, 0.0 RGB 橙色
+ (UIColor *)purpleColor; // 0.5, 0.0, 0.5 RGB 紫色
+ (UIColor *)brownColor; // 0.6, 0.4, 0.2 RGB 棕色
+ (UIColor *)clearColor; // 0.0 white, 0.0 alpha 清除颜色(空色)
一个UIImage对象代表一张图片,一般通过imageNamed:方法就可以通过文件名加载项目中的图片(PNG格式的图片可以省略扩展名)
UIImage *image = [UIImage imageNamed:@"btn_01"];
UIButton自带了很多种不同的样式
在用代码创建按钮的同时指定按钮样式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIButtonTypeCustom:无类型,按钮的内容需要自定义
UIButtonTypeDetailDisclosure:
UIButtonTypeInfoLight:
UIButtonTypeInfoDark:
UIButtonTypeContactAdd:
最后要有提交:
[self.view addSubview:btn];
按钮代码提交到了视图里。显示
以上要统一的写在viewDidLoad 对象方法里:
//视图加载完成需要调用的方法,继承的方法,需要调用父类的这个方法,千万不能丢 //通常视图控制器的初始化工作,都在这里执行 - (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];