Скрыть клавиатуру / resignFirstResponder принудительно - PullRequest
3 голосов
/ 25 ноября 2011

Я работаю над приложением, которое имеет tableView с textField в правой части каждой ячейки (более 20 ячеек). Я создал пользовательские ячейки для каждой строки, кроме последней. В последнем ряду есть только кнопка.

Теперь я хочу позвонить resignFirstResponder по нажатию кнопки.
Что мне делать, пожалуйста, помогите?

Ответы [ 4 ]

2 голосов
/ 25 ноября 2011

Возможно, вы хотите отслеживать текстовое поле с помощью клавиатуры.Реализуйте протокол <UITextFieldDelegate> в вашем контроллере и установите контроллер в качестве каждого из делегатов текстовых полей.Напишите метод textFieldDidBeginEditing: следующим образом, установив переменную экземпляра с именем currentTextField:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    currentTextField = [textField retain];
}

Затем в вашем действии для кнопки запустите [currentTextField resignFirstResponder].

2 голосов
/ 25 ноября 2011

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

[myCellTextField resignFirstResponder];
1 голос
/ 25 ноября 2011

Ответ Aopsfan, вероятно, является лучшим решением на данный момент.Однако, чтобы добавить к нему (так как я не могу оставлять комментарии), не забудьте освободить объект:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if (currentTextField != nil) {
        [currentTextField release];
    }
    currentTextField = [textField retain];
}

Лучше по-прежнему использовать @ property's и @synthesize, чтобы среда выполнения могла выполнять управление памятью за вас.

[ViewController] .h

@property (nonatomic, retain) UITextField* currentTextField;

[ViewController] .m

@synthesize currentTextField = _currentTextField;

- (void)viewDidLoad|Appear {
    self.currentTextField = nil;
}

- (void) dealloc {
    [_currentTextField release], _currentTextField = nil;
    ...
    [super dealloc];
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentTextField = textField;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.currentTextField) {
        [self.currentTextField resignFirstResponder];
    }
}
0 голосов
/ 25 ноября 2011

Думаю, эта ссылка поможет вам:

Цель C: ResignFirstResponder с кнопкой

Укажите код, чтобы вам было легче помочь.

Надеюсь, это поможет вам. :)

...