2011-06-20 61 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 
} 

希望它对你有帮助。

如有任何困难,请告知我。

相关问题