Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何定义广义选择器方法_Ios_Objective C_Selector - Fatal编程技术网

Ios 如何定义广义选择器方法

Ios 如何定义广义选择器方法,ios,objective-c,selector,Ios,Objective C,Selector,我的问题可能被错误地描述,但下面的解释会让你明白我在寻找什么 我编写了以下方法在键盘上添加一个“完成”按钮。因为我有很多屏幕,用户必须通过键盘输入值,所以我想在一个地方写这个方法,以避免冗余。我已经编写了一个类,在这个类中我定义了以下方法,我和我正在将UIViewController的textfield和object作为参数传递。我必须添加选择器方法,当用户点击“完成”按钮时将调用该方法。问题是在哪里定义选择器以退出键盘 - (void)addDoneButtonOnToolBar:(UITex

我的问题可能被错误地描述,但下面的解释会让你明白我在寻找什么

我编写了以下方法在键盘上添加一个“完成”按钮。因为我有很多屏幕,用户必须通过键盘输入值,所以我想在一个地方写这个方法,以避免冗余。我已经编写了一个类,在这个类中我定义了以下方法,我和我正在将UIViewController的textfield和object作为参数传递。我必须添加选择器方法,当用户点击“完成”按钮时将调用该方法。问题是在哪里定义选择器以退出键盘

- (void)addDoneButtonOnToolBar:(UITextField*)objUITextField objViewController:(UIViewController*)objViewController
{
    //UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,SCREEN_WIDTH, 40)];
    UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];
    [keyboardDoneButtonView sizeToFit];

    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:objViewController action:@selector(doneKeyboardClicked:)];
    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
    objUITextField.inputAccessoryView = keyboardDoneButtonView;
}

因此,不恰当的是,在何处定义“doneKeyboardClicked:”?

您可以将其归入一个类别:

@implementation UIViewController (Selector)

- (void)doneKeyboardClicked:(UIBarButtonItem *)item {
    [self.view endEditing:true];
}

@end 

我认为明智的解决方案是使用UITextField的子类,在init上设置inputAccessoryView,并单击选择器DoneKeyboard,如下所示:

-(void) doneKeyboardClicked:(UIBarButtonItem*)item {
    [self resignFirstResponder];
}

您的
objUITextField
在哪里?您已经定义了
target:objViewController
,因此它应该在
objViewController
中。我已经在单独的类中声明并定义了此方法,在该类中我将textfield和视图控制器的对象作为参数传递,这会给我警告,因为我没有在该类中定义“doneKeyboardClicked”