1. 程式人生 > >iOS開發學習筆記 -- (二)動態新增控制元件和事件處理

iOS開發學習筆記 -- (二)動態新增控制元件和事件處理

剛開始學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!”,很簡單,繫結其他事件也是類似的。