首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UITableViewCell的UITextField子视图将成为第一响应者?

UITableViewCell的UITextField子视图将成为第一响应者?
EN

Stack Overflow用户
提问于 2010-04-17 20:00:56
回答 4查看 11.7K关注 0票数 17

我有一个核心数据应用程序,它使用导航控制器向下钻取到详细视图,然后如果您编辑详细视图中的一行数据,您将进入该单行的编辑视图,就像在苹果CoreDataBooks示例中一样(除了CoreDataBooks只使用它自己的UITextField,而不是像我的那样是UITableViewCell的子视图)!

编辑视图是一个UITableviewController,它以编程方式在单元格中创建具有单节单行和UITextfield的表。

我想要发生的情况是,当您选择要编辑的行时,编辑视图被推到导航堆栈上,并且编辑视图在屏幕上以动画方式移动,我希望文本字段被选择为firstResponder,以便当视图在屏幕上移动到适当的位置时,键盘已经显示。例如在联系人应用程序或CoreDataBooks应用程序中。

我目前在我的应用程序中有以下代码,它会导致视图加载,然后你会看到键盘出现(这不是我想要的,我希望键盘已经在那里)

代码语言:javascript
复制
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [theTextField becomeFirstResponder];
}

您不能将其放入-viewWillAppear中,因为文本字段尚未创建,因此theTextField为空。在他们实现我想要的功能的CoreDataBooks应用程序中,他们从半边加载他们的视图,所以他们使用相同的代码,但在-viewWillAppear中,文本字段已经被创建!

有没有办法在不创建nib的情况下绕过这个问题,我希望保持实现的程序化,以实现更大的灵活性。

非常感谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-22 22:36:23

在与Apple Dev支持团队交谈后,我有了一个答案!

您需要做的是在-(void)loadView;中创建一个屏幕外的UITextField,然后将其设置为first responder,然后在viewDidLoad方法中,您可以将UITableViewCell中的UITextField设置为first responder。下面是一些示例代码(请记住,我是在UITableViewController中执行此操作的,所以我也在创建表视图!)

代码语言:javascript
复制
- (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];
}

我希望这篇文章能帮助那些和我一样的人!

如果其他人能找到更好的方法,请说。

票数 16
EN

Stack Overflow用户

发布于 2011-09-03 16:10:31

试着用viewDidAppear方法做,对我很管用。

票数 5
EN

Stack Overflow用户

发布于 2010-04-17 21:44:14

我认为最明显的解决方案是在视图控制器的init方法中创建文本字段。这通常是配置视图的地方,因为视图控制器确实需要填充的视图属性。

然后,您可以在viewWillAppear中将文本字段设置为first responder,并且在视图滑入时键盘应该是可见的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2658261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档