Подтвердить что ты не робот

UITextField subview UITableViewCell, чтобы стать первым ответчиком?

У меня есть основное приложение данных, которое использует контроллер навигации для детализации, а затем, если вы редактируете одну из строк данных в подробном представлении, вы попадаете в Edit View для этой единственной строки, например в примере Apples CoreDataBooks (кроме CoreDataBooks использует только UITextField, а не тот, который является подзадачей UITableViewCell как мой)!

Представление редактирования представляет собой UITableviewController, который создает свою таблицу с одной строкой одной строки и UITextField в ячейке, программно.

Я хочу, чтобы это произошло, когда вы выбираете строку для редактирования, а представление редактирования помещается в стек навигатора, а вид редактирования анимируется, перемещаясь по экрану, я хочу, чтобы текстовое поле было выбрано как firstResponder, так что клавиатура уже отображается, когда представление перемещается по экрану, чтобы занять позицию. Как в приложении "Контакты" или в приложении CoreDataBooks.

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

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [theTextField becomeFirstResponder];
}

Вы не можете поместить это в -viewWillAppear, поскольку текстовое поле еще не создано, поэтому theTextField равно нулю. В приложении CoreDataBooks, где они достигают того, что я хочу, они загружают свой вид из наконечника, поэтому они используют один и тот же код, но в -viewWillAppear, поскольку текстовое поле уже создано!

Есть ли способ обойти это без создания нити, я хочу, чтобы программная реализация стала более гибкой.

Большое спасибо

4b9b3361

Ответ 1

После выступления с командой поддержки 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];
}

Я надеюсь, что это поможет кому-то застрять в том же положении, что и я!

Если кто-то еще увидит лучший способ сделать это, скажите.

Ответ 2

Попробуйте сделать это в методе viewDidAppear, работает для меня.

Ответ 3

Я думаю, что очевидным решением является создание текстового поля в методе init контроллера вида. Обычно вы настраиваете представление, потому что для контроллера вида требуется свойство заполненного представления.

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

Ответ 4

Вы пытались использовать методы делегата uinavigationcontroller?:

navigationController: willShowViewController: анимированные: