2017-07-22 9 views
0

@selectorメソッドで引数を渡すときにエラーが発生しました。@selectorメソッドの引数を渡す

これは私のコードです:

-(void) accessoryView : (UITextField*) textField 
{ 

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; 
    numberToolbar.barStyle = UIBarStyleBlackTranslucent; 
    numberToolbar.items = @[[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelNumberPad)], 
          [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], 
          [[UIBarButtonItem alloc]initWithTitle:@"Apply" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad:textField:)]]; 


    [numberToolbar sizeToFit]; 
    textField.inputAccessoryView = numberToolbar; 
} 

-(void)doneWithNumberPad : (UITextField*) txt : (id) sender { 

} 
+0

アクションセレクタに任意の引数を渡すことはできません。セレクタは、バーボタンアイテムが予期している形式に準拠する必要があります – Paulw11

+0

"textField"を "doneWithNumberPad"メソッドに渡す方法はありますか? –

答えて

1

あなたのテキストフィールドの参照変数の助けを借りることができます。テキストフィールドとしてグローバルプロパティを宣言します。現在アクティブなテキストフィールドを参照し、必要に応じてすべてのメソッドにアクセスします。

UITextField *activeTextField; 

// UITextField Delegates 
-(void)textFieldDidBeginEditing:(UITextField *)textField {  
    activeTextField = textField; 
} 

このactiveTextFieldプロパティは、任意の場所でクラス内で使用できます。

クラスをUITextFieldのデリゲートとして定義する必要があります。

​​
+0

あなたの答えをありがとう –

+0

あなたの問題を解決するのに役立ちましたか? – luckyShubhra

0

まず:あなたのセレクタが間違っています。 action:@selector(doneWithNumberPad::)にするか、または2番目の方法を-(void)doneWithNumberPad : (UITextField*) txt textField: (id) senderに変更する必要があります。

ただし、2番目の方法:カスタムの追加パラメータをアクションメソッドで送信することはできません。プロパティ上のテキストフィールドにアクセスする必要があります。テキストフィールドの編集が開始されると、現在のテキストフィールドをプロパティに格納することができます。このイベントを受信するには、ビューコントローラがUITextFieldDelegateを実装する必要があります。

+0

私は合計10のtextFieldを持っていて、そのうち5つはaccessoryViewを呼び出す必要があります。このシナリオで上記のコードを使用するにはどうすればよいですか。 –

+0

私は自分の投稿を拡張しました。 – clemens

+0

あなたの答えをありがとう –

関連する問題