UITextField подпредставление UITableViewCell, чтобы стать первым респондентом? - PullRequest
17 голосов
/ 17 апреля 2010

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

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

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

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

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

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

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

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

Ответы [ 4 ]

15 голосов
/ 22 апреля 2010

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

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

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

5 голосов
/ 03 сентября 2011

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

3 голосов
/ 17 апреля 2010

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

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

2 голосов
/ 19 апреля 2010

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

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

...