在@selector方法中传递参数

时间:2017-07-22 10:43:49

标签: ios objective-c arguments 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 {

}

2 个答案:

答案 0 :(得分:2)

您可以为文本字段获取参考变量的帮助。将全局属性声明为文本字段。保持对当前活动文本字段的引用,并根据您的要求在每种方法中访问它。

UITextField *activeTextField;

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

您可以在任何地方使用此activeTextField属性。

您需要将您的类定义为UITextField的委托。

self.yourTextField.delegate = self

答案 1 :(得分:0)

首先:你的选择器错了。我应该action:@selector(doneWithNumberPad::)或将您的第二种方法重命名为-(void)doneWithNumberPad : (UITextField*) txt textField: (id) sender

但第二:您无法使用操作方法发送自定义附加参数。您应该访问属性上的文本字段。在您的情况下,当文本字段中的编辑开始时,您可以将当前文本字段存储在属性中。您的视图控制器应实现UITextFieldDelegate以接收此事件。