方法@selector的参数

时间:2012-11-07 15:59:04

标签: ios methods arguments selector

我有一个方法@selector,其参数类型为NSString。当我编译应用程序时,我收到此错误

No visible @interface for 'UIButton' declares the selector 'addTarget:action:
withObject:forControlEvents

该方法在头文件中声明。 这是代码:

 -(void)loadDetailListViewController: (NSString *)nameTable{
      //......
  }

 - (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id 
  <MKAnnotation>)annotation
  {
        //.....

   UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

   [rightButton addTarget:self action: @selector(loadDetailListViewController:) 
     withObject:self.nameTable forControlEvents:UIControlEventTouchUpInside];
    //here the error


        //.....
   }

我不知道括号是否正确

6 个答案:

答案 0 :(得分:2)

该方法不存在。这样做

[rightButton addTarget:self action: @selector(loadDetailListViewController:) forControlEvents:UIControlEventTouchUpInside];

如果你需要将一个字符串传递给该方法,我建议使用字符串属性对UIButton进行子类化,然后在那里设置它。该按钮在选择器中作为参数传递,因此您可以从那里获取它和字符串:

- (void)loadDetailListViewController:(MyCustomButtonClass *)button {

    // access the string from the button

}

答案 1 :(得分:0)

UIButton(UIControl)没有像您使用的那样签名。 删除withObject即可。您可以考虑删除tableName参数,因为它是对象属性,可以直接读取。

文档:

  
      
  • (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
  •   

答案 2 :(得分:0)

试试这个

 -(void)loadDetailListViewController: (id)sender{
      //......
  }

 - (MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id 
  <MKAnnotation>)annotation
  {
        //.....

   UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

   [rightButton addTarget:self action: @selector(loadDetailListViewController:) 
     forControlEvents:UIControlEventTouchUpInside];
    //here the error


        //.....
   }

答案 3 :(得分:0)

该错误表明编译器找不到可以在'addTarget:action: withObject:forControlEvents上调用的名为UIButton的方法。

UIControl的方法为addTarget:action:forControlEvents:,但不包含“ withObject:”的方法

答案 4 :(得分:0)

没有这样的方法addTarget:action: withObject: forControlEvents

使用:

[rightButton addTarget:self action: @selector(loadDetailListViewController:) forControlEvents:UIControlEventTouchUpInside];

您不需要将self.nameTable传递给此方法,您可以在loadDetailListViewController中访问它:很好

答案 5 :(得分:0)

没有类似的方法:addTarget:(id)target action:(SEL)action withObject:(id) forControlEvents:(UIControlEvents)controlEvents

将其更改为:addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

请参阅:UIControl Class