0

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


        //.....
   }

かっこが正しいかわかりません

4

6 に答える 6

3

そのメソッドは存在しません。これはします

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

メソッドに文字列を渡す必要がある場合は、文字列プロパティを使用してUIButtonをサブクラス化することをお勧めします。ここで、文字列を設定できます。ボタンはセレクターのパラメーターとして渡されるため、そこからボタンと文字列を取得できます。

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

    // access the string from the button

}
于 2012-11-07T16:09:09.973 に答える
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


        //.....
   }
于 2012-11-07T16:07:45.543 に答える
0

'addTarget:action: withObject:forControlEventsエラーは、コンパイラがで呼び出すことができるという名前のメソッドを見つけることができないことを示していますUIButton

UIControlのメソッドがありますが、「 withObject:addTarget:action:forControlEvents:を含むメソッドはありません

于 2012-11-07T16:08:32.307 に答える
0

そのようなメソッドはありませんaddTarget:action: withObject forControlEvents

使用する:

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

self.nameTableをこのメソッドに渡す必要はありません。loadDetailListViewController内でアクセスできます。問題ありません。

于 2012-11-07T16:08:39.207 に答える
0

次のような方法はありません。addTarget:(id)target action:(SEL)action withObject:(id) forControlEvents:(UIControlEvents)controlEvents

それを次のように変更します。addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

参照してください: UIControl クラス

于 2012-11-07T16:10:22.090 に答える
0

使用するような UIButton (UIControl) の署名はありません。取り外しwithObjectて大丈夫です。tableName引数はオブジェクト プロパティであり、直接読み取ることができるため、引数を削除することを検討してください。

ドキュメント:

  • (void)addTarget:(id)ターゲット アクション:(SEL)アクション forControlEvents:(UIControlEvents)controlEvents
于 2012-11-07T16:06:31.940 に答える