首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从已编辑的UITextField中获取UITableViewCell的索引

如何从已编辑的UITextField中获取UITableViewCell的索引
EN

Stack Overflow用户
提问于 2011-04-20 23:01:19
回答 8查看 16.6K关注 0票数 6

我正在做一个基于iPhone的BI项目。

我在UITextViewCell中有一个UITextFieldUITextFieldDelegate指向我的UITableViewController,我没有为UITextViewCellUITextField做任何子类。

现在,在文本字段结束后,对委托进行编辑

代码语言:javascript
复制
  -(void)textFieldDidEndEditing:(UITextField*)textField

我需要知道我正在编辑的当前单元格的行索引,有没有办法获得文本字段的父单元格?或者,我可以在创建单元格时为文本字段设置一些属性,比如'rowIndex‘吗?我真的需要这个值来保存新的文本。

谢谢。愿原力与你同在。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-21 02:16:59

您真正要问的问题是,当用户在表单元格的文本字段中输入数据时,如何知道将对数据模型所做的更改保存到何处。

@Ole Begemann建议使用tag属性是完全有效的。这取决于您的数据模型。如果您只需要一个整数来标识该值在模型中的位置,则将该整数存储在每个文本字段的tag属性中。由于您没有使用节,因此行索引相当于拥有整个索引路径。

请记住,所有视图都有一个tag属性。因此,可以将行索引存储在cell.contentView.tag中,将列索引存储在textField.tag中。在文本字段中,您可以使用textField.superview获得内容视图。如果另一个视图是textField的superview,则使用该视图。

如果您需要更复杂的东西来标识模型中的位置来保存文本字段内容,那么您需要做一些不同的事情。我将创建UITableViewCellUITextField的子类,并将您需要的任何信息存储在子类中定义的属性中。

票数 8
EN

Stack Overflow用户

发布于 2013-09-24 19:55:47

随着iOS 7中UITableViewCell类的变化,您必须以更动态的方式访问父单元格。您可以通过使用以下代码片段(应该放在textFieldDidEndEditing:委托方法中)来访问UITextField的单元格。

代码语言:javascript
复制
// Get the cell in which the textfield is embedded
id textFieldSuper = textField;
while (![textFieldSuper isKindOfClass:[UITableViewCell class]]) {
    textFieldSuper = [textFieldSuper superview];
}
// Get that cell's index path
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)textFieldSuper];

该代码片段在iOS 6和iOS 7中都有效。

票数 9
EN

Stack Overflow用户

发布于 2011-04-20 23:09:57

如果已将UITextField作为子视图添加到UITableViewCell中,则可以从UITextField's superview属性访问UITableViewCell

试试下面的。

代码语言:javascript
复制
UITableViewCell* myCell = (UITableViewCell*)textField.superview ;

如果你遇到任何问题,请让我知道。

编辑:

您将从UITextField的标记属性中获取行,因此

代码语言:javascript
复制
NSUInteger  myRow = myTextField.tag;

正如您所说的,您的应用程序不支持具有多个部分,这意味着您的所有行都位于0部分。

代码语言:javascript
复制
NSUInteger  mySection = 0;

现在根据上面的信息构造一个NSIndexPath实例。

代码语言:javascript
复制
NSIndexPath *myIndexPath =[NSIndexPath indexPathForRow:myRow  inSection:mySection]; //Do'nt release myIndexPath instance.

UITableViewCell* myCell = [myTableView cellForRowAtIndexPath:myIndexPath];

现在,您在您的UITableView中有了位于myRowmyCell

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

https://stackoverflow.com/questions/5732438

复制
相关文章

相似问题

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