2011-06-20 62 views
2

注意:我只在模擬器上測試過。當UIBarButtonItem點擊時,操作沒有被調用

我想在代碼中添加target-action而不是將它作爲Interface Builder中的IBAction進行連接。

theButton位於左上方的導航欄上,在IB中創建。

步驟:

  1. 聲明theButton作爲一個IBOutlet和IB連接它。

  2. 添加這viewDidLoad

    self.theButton.target = self; 
    self.theButton.action = @selector(theAction); 
    
  3. 我被這個測試theAction

    - (void)theAction { 
    NSLog(@"theAction called"); 
    //do some other stuff 
    } 
    

當我在模擬器上點擊theButton,沒有任何反應。我根本沒有看到NSLog語句。

我錯過了什麼?

回答

0

想通了。必須處理我的配置。我使用的標籤欄控制器爲多個選項卡使用相同的視圖控制器。每個視圖控制器爲某些選項卡顯示不同的過濾數據。

因此,在這種配置中,您必須確保連接包含在選項卡欄項目中的每個視圖控制器的IBOutlets。我只連接了一個,這就是爲什麼它不能用於某些標籤項目。

4

您是否已將動作連接到界面構建器中的按鈕?

如果沒有,你應該在你的.h文件中聲明的動作

-(IBAction)theAction; 

變化的.m文件動作的名稱

-(IBAction)theAction{ 

} 

而且finealy動作連接到按鈕接口建設者。

+0

不需要,因爲它是通過self.theButton.target = self以編程方式完成的;和self.theButton.action = @selector(theAction); – Russian

+0

編輯我的答案,以編程方式使用。 – shannoga

+0

請注意,* UIBarButtonItem *將不會響應* addTarget:action:forControlEvents:*方法 – EmptyStack

3

如下更改功能:

-(IBAction)theAction{ 
    NSLog(@"theAction called"); 
    //do some other stuff 
} 

如果你喜歡叫 「@選擇(theAction :);」 然後更改功能如下:

-(IBAction)theAction:(id)sender{ 
    NSLog(@"theAction called"); 
    //do some other stuff 
} 

希望它對你有幫助。

如有任何困難,請告知我。

相關問題