刚开始学iOS开发的时候,经常要跟interface builder打交道,乍一看拖控件是挺方便的,跟以前做C#开发类似,但是Xcode比较恶心的一点是,拖完控件之后,还得手动地在Connections Inspector中绑定控件和变量的关系,事件的绑定也在这里完成。当然如果这些都有一个源代码给我们看到,倒也还好(比如C#中的xx.designer.cs),但是Xcode又全部给扔到了.xib文件中,这是一个XML文件,看起来并不像看代码那么直觉,所以是一件比较蛋疼的事情。
另一方面,如果使用interface builder,针对不同的iOS版本,不同的orientation(屏幕方向),我们可能需要设计多套UI,这在开发和维护上都是一件比较蛋疼的事情。
因此,我们考虑一种更“程序员”的方式来做这些事情:抛开Interface Builder,在代码中创建控件,定义布局,并添加事件处理机制。
下面的例子演示动态添加一个按钮以及绑定点击事件。
首先打开Xcode,创建一个新项目,可以是Single View,也可以是Empty的,我们以Single View的为例。
虽然创建的项目中有一个MainStoryboard.storyboard,并且绑定了interface builder,但我们不会去用它。我们直接修改ViewController.m的viewDidLoad方法,修改后代码如下:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn2.frame = CGRectMake(10, 10, 80, 30); btn2.tag = 2; [btn2 setTitle:@"Hey~" forState:UIControlStateNormal]; [btn2 addTarget:self action:@selector(onClickOK:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn2]; }首先,创建一个UIButton,它的frame属性表示它的位置和大小信息,我们用CGRectMake方法,四个参数的意思分别是:x, y, width, height。
接下来设置tag,标题。
然后是比较关键的一行,绑定TouchUpInside事件的处理方法到onClickOK。
最后将控件添加到subView中。
指定了处理方法,接下来我们来实现onClickOK方法,在ViewController.m中添加下面的方法:
-(IBAction)onClickOK:(id)sender{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"You got me!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; }这个方法会弹出一个对话框,并显示"You got me!”,很简单,绑定其他事件也是类似的。