В iOS 5.1 и iOS 5.0 он работает, но в iOS 6.0 клавиатура не отображается.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UITextField *textField = self.emailAddressTextField;
[textField becomeFirstResponder];
}
Теперь я переместил логику в -viewDidAppear:
.
// This works but is not desirable.
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UITextField *textField = self.emailAddressTextField;
[textField becomeFirstResponder];
}
Это работает, но нежелательно. Сдвижная анимация клавиатуры отображается после загрузки вида.
Я хочу, чтобы клавиатура присутствовала, так как анимация "слайд-лево" отображает представление, загружаемое в навигационный контроллер.
Кто-нибудь знает, как загрузить клавиатуру, поскольку представление появляется в iOS 6?
Обновление
Основываясь на обращении @Duck, я сделал немного больше тестов. Это похоже на UITextFields, содержащиеся в UITableViewCells.
Есть ли у кого-нибудь предложения?
ПЕРВЫЙ РЕШЕНИЕ
Итак, полное описание. Это табличный вид с двумя статическими ячейками (адрес электронной почты и пароль). В представлении есть кнопка входа в систему, которой назначается представление нижнего колонтитула таблицы. Эти две ячейки имеют в них текстовое поле и имеют тип SICOTextFieldCell нестандартного типа.
Моим решением было поместить поддельное текстовое поле за кнопкой входа (в виде нижнего колонтитула таблицы).
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UITextField *textField = self.SICO_fakeTextField;
[textField becomeFirstResponder];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UITextField *textField = self.SICO_emailAddressTextField;
[textField becomeFirstResponder];
}
НОВОЕ РЕШЕНИЕ
Основываясь на ответе @stm, я придумал новое (превосходное?) решение.
Мое решение состояло в вызове -selectRowAtIndexPath:animated:scrollPosition:
. -[SICOTextFieldCell setSelected:animated:]
, который является настраиваемой ячейкой представления таблицы, вызывает [self.textField becomeFirstResponder]
, который волшебным образом рисует клавиатуру. Это все еще взломать, но это чище взломать.
@interface SICOLogInViewController ()
@property (readonly, nonatomic) UITextField *SICO_emailAddressTextField;
@property (readonly, nonatomic) UITextField *SICO_passwordTextField;
@end
@implementation SICOLogInViewController
- (IBAction)logIn
{
// Controller Details
}
#pragma mark Private
- (UITextField *)SICO_textFieldForRowAtIndexPath:(NSIndexPath *)indexPath
{
SICOTextFieldCell *cell = (SICOTextFieldCell *)[self.tableView cellForRowAtIndexPath:indexPath];
return cell.textField;
}
#pragma mark View lifecycle
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO scrollPosition:UITableViewScrollPositionTop];
}
#pragma mark UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
switch (textField.returnKeyType) {
case UIReturnKeyGo: [self logIn]; break;
case UIReturnKeyNext: [self.SICO_passwordTextField becomeFirstResponder]; break;
default: break;
}
return YES;
}
#pragma mark Properties
- (UITextField *)SICO_emailAddressTextField
{
return [self SICO_textFieldForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
}
- (UITextField *)SICO_passwordTextField
{
return [self SICO_textFieldForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]];
}
@end