UIrextfield Supwiew UiableViewCell, чтобы стать первым ответчиком?
-
27-09-2019 - |
Вопрос
У меня есть основное приложение для данных, которое использует навигационный контроллер для сверления до подробного представления, а затем, если вы редактируете один из строк данных в подробном представлении, который вы получаете в редактируемое представление для этой одной строки, как в яблоках CoredataBooks Пример (кроме Coredatabooks использует только UITextField
самостоятельно, не тот, который является субвезонным UITableViewCell
как мой)!
Представление редактирования является UITableviewController
который создает свой стол с одним рядом и UITextfield
в клетке, программно.
То, что я хочу произойти, это когда вы выбираете ряд для редактирования, и вид редактирования нажимается на стек навигации, а представление редактирования анимировано перемещение по экрану, я хочу выбрать текстовое поле, чтобы выбранная как FIRSTRSTRESPONDER, так что клавиатура уже отображается Когда вид перемещается через экран, чтобы занять положение. Как в приложении контактов или в приложении Coredatabooks.
В настоящее время у меня в моем приложении следующий код, который вызывает нагрузку на загрузку, а затем вы видите, как появляется клавиатура (которая не то, что я хочу, я хочу, чтобы клавиатуру уже быть там)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
Вы не можете положить это в -viewWillAppear
Как текстовое поле не было создано, так theTextField
это ноль. В приложении Coredatabooks, где они достигают того, что я хочу, они загружают свое мнение из ниб, поэтому они используют один и тот же код, но и в -viewWillAppear
Как текстовое поле уже было создано!
В любом случае, о том, чтобы обойти это без создания NIB, я хочу сохранить программу реализации, чтобы обеспечить большую гибкость.
Огромное спасибо
Решение
После разговора с командой поддержки 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];
}
Я надеюсь, что это поможет всем застрять в том же положении, что и я!
Если кто-то еще может видеть лучший способ сделать это, пожалуйста, скажите.
Другие советы
Попробуйте сделать это в ViewDiDAppear Method, работает для меня.
Я думаю, что очевидное решение состоит в том, чтобы создать текстовое поле в init
Способ контроллера просмотра. Обычно это, как вы настраиваете представление, поскольку контроллер просмотра требуется свойство заполненной просмотра.
Тогда вы можете установить текстовое поле в качестве первого ответника в viewWillAppear
И клавиатура должна быть видна, поскольку вид просмотра.
Вы пытались использовать методы делегата UinaviggationController?:
NavipateController: WillShowviewController: Animated: