2012-11-07 59 views
0

我有一個方法@selector,參數類型爲NSString。當我編譯應用程序時,出現此錯誤方法的參數@selector

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 


     //..... 
    } 

我不知道,如果括號是正確

回答

0

沒有爲的UIButton(UIControl)就像你使用一個沒有這樣的簽名。 刪除withObject,它會沒事的。您可以考慮刪除tableName參數,因爲它是對象屬性,可以直接讀取。

文件:

  • (無效)addTarget:(ID)目標採取的行動(SEL)動作forControlEvents:(UIControlEvents)controlEvents
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 


     //..... 
    } 
+0

您發佈的代碼不正確。 'loadDetailListViewController:'方法不能有'NSString *'的參數。如果它有一個參數,它將成爲動作的發送者。在這種情況下,按鈕。所以它應該是' - (void)loadDetailListViewController:(UIButton *)按鈕{'。 – rmaddy

+0

thx錯過了,我編輯了我的答案。 – 2012-11-08 14:19:15

0

錯誤是指出編譯器找不到名爲的方法可以撥打UIButton

UIControl具有addTarget:action:forControlEvents:的方法,但不是一種含 「withObject:

0

有沒有這樣的方法addTarget:動作:withObject: forControlEvents

使用:

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

你不需要傳遞self.nameTable到這個方法,你可以在loadDetailListViewController裏面訪問它:只要f ine

2

該方法不存在。這確實

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

如果你需要一個字符串傳遞給方法,我建議有一個字符串屬性繼承的UIButton,你可以在此設置。該按鈕作爲參數傳遞給你的選擇,所以你可以得到它,並從那裏串:

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

    // access the string from the button 

} 
0

沒有方法,如:addTarget:(id)target action:(SEL)action withObject:(id) forControlEvents:(UIControlEvents)controlEvents

變化,爲:addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

請參閱:UIControl Class