2017-02-23 33 views
0

Мой вопрос может быть ошибочно изображен, но после пояснения вы поймете, что я ищу.Как определить обобщенный метод выбора

Я написал следующий метод для добавления сделанной кнопки над клавиатурой. И поскольку у меня много экранов, где пользователь должен ввести значение с клавиатуры, поэтому я хочу написать этот метод в одном месте, чтобы избежать избыточности. Я написал один класс, в котором я определил следующий метод, и я и я передаю текстовое поле и объект UIViewController в качестве параметров. Мне нужно добавить метод выбора, который будет вызываться, когда пользователь коснется кнопки «Готово». Проблема в том, где определить селектор, чтобы отменить клавиатуру?

- (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:»?

+0

где ваш 'objUITextField'? Вы уже определили 'target: objViewController', поэтому он должен находиться в' objViewController'. – x4h1d

+0

Я объявил и определил этот метод в отдельном классе, где я передаю текстовое поле и объект контроллера View в качестве параметров – Developer

ответ

0

Вы можете поместить его в категории:

@implementation UIViewController (Selector) 

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

@end 
+0

Это дает мне предупреждение, поскольку я не определил «doneKeyboardClicked» в этом классе – Developer

0

Я думаю, что разумное решение заключается в использовании подкласса UITextField, который устанавливает inputAccessoryView на инициализации и имеет селектор doneKeyboardClicked как это:

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