我有一个核心数据应用程序,它使用导航控制器深入查看详细视图,然后如果您在详细信息视图中编辑其中一行数据,您将进入该单行的编辑视图,如在Apples CoreDataBooks示例中(除了CoreDataBooks本身仅使用UITextField
,而不是像我一样UITableViewCell
的子视图)!
编辑视图是UITableviewController
,它以编程方式在单元格中创建一个包含单个部分单行和UITextfield
的表格。
我想要发生的是当您选择要编辑的行并且编辑视图被推送到导航堆栈并且编辑视图在屏幕上移动时,我希望将文本字段选为firstResponder以便键盘已经显示为视图在屏幕上移动以占据位置。就像在联系人应用程序或CoreDataBooks应用程序中一样。
我目前在我的应用程序中有以下代码导致视图加载,然后您看到键盘出现(这不是我想要的,我希望键盘已经存在)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
由于尚未创建文本字段,因此您无法将其放在-viewWillAppear
中,因此theTextField
为零。在CoreDataBooks应用程序中,他们实现我想要的东西,他们从笔尖加载他们的视图,所以他们使用相同的代码,但在-viewWillAppear
,因为文本字段已经创建!
无论如何在没有创建笔尖的情况下解决这个问题,我希望保持实现编程以实现更大的灵活性。
非常感谢
答案 0 :(得分:15)
在与Apple Dev支持团队交谈后,我有了答案!
您需要做的是在UITextField
中创建屏幕外-(void)loadView;
,然后将其设置为第一响应者,然后使用viewDidLoad
方法将其设置为UITextField
in UITableViewCell
成为第一响应者。下面是一些示例代码(请记住我在UITableViewController
中这样做,所以我也在创建tableview!
- (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];
}
我希望这有助于任何与我保持同一位置的人!
如果其他人能够看到更好的方法,请说。
答案 1 :(得分:5)
尝试在viewDidAppear方法中执行此操作,适用于我。
答案 2 :(得分:3)
我认为显而易见的解决方案是在视图控制器的init
方法中创建文本字段。这通常是配置视图的位置,因为视图控制器确实需要填充的视图属性。
然后您可以将文本字段设置为viewWillAppear
中的第一响应者,并且当视图滑入时键盘应该是可见的。
答案 3 :(得分:2)
您是否尝试过使用uinavigationcontroller委托方法?:
navigationController:willShowViewController:动画: