2010-12-03 3 views
0

В моем представлении у меня есть 3 UITextField, для каждого из них я создал аксессуар для клавиатуры, как объясняется apple.ResignFirstResponder из Keyboard AccessoryView Button

В моем аксессуаре я добавил кнопку, которая должна вызвать функцию «CloseKeyboard». В этой функции я не могу найти способ перехвата UITextField, в котором пишет клавиатура, и на котором мне нужно вызвать ResignFristResponder.

Чтобы добавить accessoryView на одном поле я написал

if (field1.inputAccessoryView == nil) { 
    field1.inputAccessoryView = [self createInputAccessoryView]; 
} 
if (field2.inputAccessoryView == nil) { 
    field2.inputAccessoryView = [self createInputAccessoryView]; 
} 
if (field3.inputAccessoryView == nil) { 
    field3.inputAccessoryView = [self createInputAccessoryView]; 
} 

А вот createInputAccessory функция этот код:

-(UIView *)createInputAccessoryView { 

    CGRect accessFrame = CGRectMake(0.0, 0.0, 20.0, 55.0); 

    UIView *inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame]; 

    UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    compButton.frame = CGRectMake(250.0, 10.0, 60.0, 40.0); 

    [compButton setTitle: @"Close" forState:UIControlStateNormal]; 

    [compButton addTarget:self action:@selector(CloseKeyboard:) 

         forControlEvents:UIControlEventTouchUpInside]; 

    [inputAccessoryView addSubview:compButton]; 

return inputAccessoryView; } 

Как я реализовать функцию «CloseKeyboard», чтобы иметь возможность resignFirstResponder от активного UITextField ?

Благодарим за помощь!

ответ

1

С прошивкой 2.0 и выше, есть простой способ, чтобы закрыть клавиатуру без необходимости отслеживать текущий активный контроль, или итерации через все доступные элементы управления или с использованием UITextFieldDelegate.

[self.view endEditing:YES] 

Из документов:

endEditing:

Вызывает мнение (или один из его встроенных текстовых полей) в отставку первый статус ответчика.

- (BOOL) endEditing :(BOOL) сила

Параметры
сила
Укажите YES, чтобы заставить первый ответчику подать в отставку, независимо от того, хочет ли он сделать так.

Возвращаемое значение
YES если представление в отставку первого статуса ответчика или NO, если это не так.

Обсуждение
Этот метод смотрит на текущий вид и его иерархии подтаблицы для текстового поля, которое в настоящее время является первым ответчиком. Если находит один, он просит, чтобы текстовое поле ушло в отставку в качестве первого ответчика. Если параметр силы установлен в YES, текстовое поле никогда не задается; вынужден уйти в отставку.

0

В качестве первого решения я попытаюсь с этой реализацией, где я принудительно каждый раз поле1 становится первымResponder, и я ухожу от него.

-(void) closeFunction:(id)sender{ 
    [field1 becomeFirstResponder]; 
    [field1 resignFirstResponder]; 
} 

Но это работа вокруг ... не решения: P

Смежные вопросы