如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者
Posted
技术标签:
【中文标题】如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者【英文标题】:UITextField unable to become first responder if added to UITableViewCell via accessoryView 【发布时间】:2011-12-20 06:32:43 【问题描述】:像许多其他用户一样,我正在尝试将 UITextField 设置为 UITableViewCell 以用于编辑行。但我没有添加新视图,而是尝试使用附件视图属性。一开始我试过这个...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITextField *textField =[[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 200.0f, 44.0f)];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryView = textField;
[textField becomeFirstResponder];
...并且 UITextField 已正确添加,但我需要再次点击它才能显示键盘。但是,如果我这样做...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITextField *textField =[[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 200.0f, 44.0f)];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell addSubview:textField];
[textField becomeFirstResponder];
...它起作用了,键盘出现了,但是,我没有得到将它作为附件视图的任何其他好处(在其他视图周围移动时更容易定位)。我想 addSubview: 调用正在改变响应者链或其他东西,并允许我的 UITextField 成为第一响应者,但认为也许有另一种方法可以让我设置单元格的附件视图。谢谢。
【问题讨论】:
【参考方案1】:我讨厌我的解决方案,但它确实有效,并且正在寻找更好的方法。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
CGRect detailTextLabelFrame = cell.detailTextLabel.frame;
detailTextLabelFrame.origin.x -= 100.0f;
detailTextLabelFrame.size.width += 100.0f;
UITextField *textField = [[UITextField alloc] initWithFrame:detailTextLabelFrame];
cell.detailTextLabel.hidden = YES;
cell.accessoryView = textField;
// These are the two lines that made it work, but it feels ugly
[cell.accessoryView removeFromSuperview];
[cell addSubview:cell.accessoryView];
[cell.accessoryView becomeFirstResponder];
【讨论】:
【参考方案2】:我希望您了解文本字段委托。试试这种方式....可能会对您有所帮助。
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
if(theTextField == yourtextfieldname)
[yourtextfieldname resignFirstResponder];
return YES;
【讨论】:
嗨,Emon,实际上我什至无法显示键盘。但是,是的,我正在使用类似的东西来关闭键盘。以上是关于如果通过附件视图添加到 UITableViewCell,UITextField 无法成为第一响应者的主要内容,如果未能解决你的问题,请参考以下文章
在drupal 7中,由于多个附件,将表单添加到视图会产生多个相同的表单,如何只保留一个?