iPhone開發進階(6)--- 編程定製UIButton

來源:互聯網
上載者:User

上一回介紹了不使用 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];
}


編譯以後,顯示如下:

 

作者:易飛揚

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.