У меня есть базовое применение данных, которое использует контроллер навигации для развертки к представлению детали и затем если Вы редактируете одну из строк данных в представлении детали, Вы взяты к Представлению Редактирования для, что одна строка, как в примере Apples CoreDataBooks (кроме CoreDataBooks только использует a UITextField
самостоятельно, не тот, который является подпредставлением UITableViewCell
как мой)!
Представление редактирования является a UITableviewController
который составляет его таблицу с единственной одной строкой раздела и a UITextfield
в ячейке, программно.
То, что я хочу произойти, - когда Вы выбираете строку для редактирования, и представление редактирования продвинуто на военно-морской стек, и представление редактирования анимировано, преодолев экран, я хочу, чтобы текстовое поле было выбрано как firstResponder так, чтобы клавиатура уже показала, поскольку представление преодолевает экран для занимания позиции. Как в приложении Контактов или в Приложении CoreDataBooks.
У меня в настоящее время есть следующий код в моем приложении, которое заставляет представление загружаться, и затем Вы видите, что клавиатура появляется (который не является тем, что я хочу, я хочу, чтобы клавиатура уже была там),
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
Вы не можете вставить это -viewWillAppear
поскольку текстовое поле еще не было создано так theTextField
ноль. В Приложении CoreDataBooks, где они достигают того, что я хочу, они загружают свое представление из пера, таким образом, они используют тот же код, но в -viewWillAppear
поскольку текстовое поле было уже создано!
Имеет ли так или иначе то, чтобы обходить это, не создавая перо, я хочу сохранить реализацию программной для включения большей гибкости.
Большое спасибо
После разговора с командой поддержки Apple Dev у меня есть ответ !
Что вам нужно сделать, так это создать закадровый UITextField
в - (void) loadView;
, а затем установить его в качестве первого респондента, а затем в viewDidLoad
вы можете установить UITextField
в UITableViewCell
в качестве первого респондента. Вот пример кода (помните, что я делаю это в UITableViewController
, поэтому я также создаю табличное представление!
- (void)loadView
{
[super loadView];
//Set the view up.
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];
//Create an negatively sized or offscreen textfield
UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
hiddenTextField = hiddenField;
[self.view addSubview:hiddenTextField];
[hiddenField release];
//Create the tableview
UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
theTableView.delegate = self;
theTableView.dataSource = self;
[self.view addSubview:theTableView];
[theTableView release];
//Set the hiddenTextField to become first responder
[hiddenTextField becomeFirstResponder];
//Background for a grouped tableview
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Now the the UITableViewCells UITextField has loaded you can set that as first responder
[theTextField becomeFirstResponder];
}
Надеюсь, это поможет любому, кто застрял в том же положении, что и я!
Если кто-нибудь иначе вы можете найти лучший способ сделать это, пожалуйста, скажите.
Я думаю, что очевидным решением является создание текстового поля в методе init
контроллера представления. Обычно вы настраиваете представление, потому что контроллеру представления требуется заполненное свойство представления.
Затем вы можете установить текстовое поле в качестве первого респондента в viewWillAppear
, и клавиатура должна быть видна при перемещении представления.
пробовали ли вы использовать методы делегата uinavigationcontroller?:
navigationController: willShowViewController: animated: