以编程方式附加事件处理程序

时间:2009-11-09 19:56:39

标签: objective-c iphone

所以,我正在尝试以编程方式将事件处理程序附加到我在iphone应用程序上使用的小部件:

addTarget:action:forControlEvents

我在Interface Builder中添加了一个UISegmentedControl,它通过@property seg公开,在loadView中,我有:

- (void)loadView
{
  [ super loadView ] ;

  //k after that attach our own event handlers
  [ seg addTarget:seg action:@selector(sliderEventIB) forControlEvents:UIControlEventAllEvents ];
}

sliderEventIB,只是告诉我们感觉事件:

-(IBAction)sliderEventIB:(id)sender forEvent:(UIEvent*)event
{
  puts( "I feel you joanna" ) ;
}

但我得到的错误是

ViewControllersTest[6744:207] *** -[UISegmentedControl sliderEventIB]:
unrecognized selector sent to instance 0x3b21b30

知道这里的内容是什么?

3 个答案:

答案 0 :(得分:2)

好像你忘了在addTarget中插入冒号:

[ seg addTarget:seg action:@selector(sliderEventIB:) forControlEvents:UIControlEventAllEvents ];

应该是sliderEventIB:不是sliderEventIB。

答案 1 :(得分:1)

正确的代码如下:

- (void)loadView
{
    [super loadView];
    [seg addTarget:self action:@selector(sliderEventIB:forEvent:) forControlEvents:UIControlEventAllEvents];
}
- (IBAction)sliderEventIB:(id)sender forEvent:(UIEvent*)event
{
    NSLog(@"I feel you joanna");
}

请注意,该方法与使用addTarget:action:forControlEvents注册的选择器相同。

答案 2 :(得分:0)

好吧,UISegmentedControl没有'sliderEventIB'方法。

该方法的'addTarget'部分询问:“一旦发生事件,我该通知谁?”。在这种情况下,您指定应通知UISegmentedControl,并应在该对象上调用sliderEventIB。相反,你应该说

[seg addTarget:self action:@selector(sliderEventIB) forControlEvents: UIControlEventAllEvents]