上一回介紹了不使用 XIB 檔案來定義 UIViewController 的方法。這一回說一說自動建立 UIButton 而不使用 XIB 檔案。
通過這一節的學習,我們可以掌握不通過 XIB (InterfaceBuilder) 來使用 UIControl 的 addTarget 方法、對應相應的事件動作。
具體的例子是基於上一講中的 CustomViewController 類,按鈕按下是計數器加一,並顯示在視圖上。
首先,在 CustomViewController 類中添加技術用的變數 count。
@interface CustomViewController : UIViewController {
int count; // 計數器變數。
}
@end
接下來,添加按鈕按下時調用的方法。
-(void)countup:(id)inSender {
count++; // 計數器自加
// inSender 是被點擊的 Button 的執行個體,下面設定其標題
[inSender setTitle:[NSString
stringWithFormat:@"count:%d", count]
forState:UIControlStateNormal];
}
setTitle 方法設定 UIButton 的標題。使用 forState: 來指定該標題顯示的狀態(按下,彈起,通常),這裡指定通常狀態顯示的標題。當然,使用 UIControlStateNormal 也是可以的。
註冊按鈕按下時的事件函數可以通過 UIControl 類中的 addTarget:action:forControlEvents: 方法(UIButton 繼承了UIControl 類,所以可以直接使用)。如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
UIButton* button = [UIButton buttonWithType:UIButtonTypeInfoLight];
button.frame = CGRectMake(100,100,100,100);
// 註冊按鈕按下時的處理函數
[button addTarget:self action:@selector(countup:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
forControlEvents: 中設定 UIControlEventTouchUpInside 是指在按鈕上按下時響應。
因為動作函數(countup)的類型是
1 -(void)countup:(id)inSender
則在註冊的時候需要寫 countup: 。
而如果函數類型是
1 -(void)countup
的話,則是 countup ,這時 addTarget 接收的函數類型如下所示:
1 - (void) countup:(id)sender forEvent:(UIEvent *)event
同一響應,也可以註冊多個處理,比如下面的代碼,將上面兩種類型的動作函數都註冊了:
// 第一種處理方法
-(void)countup:(id)inSender {
count++;
[inSender setTitle:[NSString
stringWithFormat:@"count:%d", count]
forState:UIControlStateNormal];
}
// 第二種處理方法
-(void)countup {
count++;
}
-(void)countup:(id)inSender forEvent:(UIEvent *)event {
count++;
[inSender setTitle:[NSString
stringWithFormat:@"count:%d", count]
forState:UIControlStateNormal];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];
UIButton* button = [UIButton buttonWithType:UIButtonTypeInfoLight];
button.frame = CGRectMake(100,100,100,100);
// 註冊第一種方法
[button addTarget:self action:@selector(countup:)
forControlEvents:UIControlEventTouchUpInside];
// 註冊第二種方法
[button addTarget:self action:@selector(countup)
forControlEvents:UIControlEventTouchUpInside];
[button addTarget:self action:@selector(countup:forEvent:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
編譯以後,顯示如下:
作者:易飛揚