我创建了一个表格,其中每个单元格都包含文本标签和文本字段。我正在添加文本字段[cell addSubview:passwordField];
,从视觉角度看它们是可编辑的等等....
当我尝试从文本字段中检索输入的值时,会出现问题。我遍历单元格并尝试抓取子视图(IE文本字段),但是,我的迭代只发现文本标签。
以下是我用来搜索的代码:
for(NSInteger i =0; i < [tableView numberOfRowsInSection:0]; i++){
NSIndexPath *path = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
UIView* subView = [[cell.contentView subviews]lastObject]; // I've also tried object at index here
// Anything beyond this is just matching....
我采取的另一种方法是递归搜索子视图,但是,再次没有产生任何结果。
答案 0 :(得分:6)
您已在细胞的子视图中添加了textField
。
[cell addSubview:passwordField];
当您尝试在cell.contentView
上找到它时
将您的textField
添加为cell.Contentview
[cell.contentView addSubview:passwordField];
以这种方式找到它 -
for(UIView *view in [cell.contentView subviews])
{
if([view isKindOfClass:[UITextfield class]])
{
UITextField *textField = (UITextField *)view;
NSLog(@"%@",textField.text);
}
}
答案 1 :(得分:2)
为什么不将数据源映射到TableView
,只检索/更新数据源中的值。然后,您可以调用reloadRowsAtIndexPaths
加载刚刚更改的行。尝试迭代TableView
而不仅仅是更新数据源似乎非常低效。
答案 2 :(得分:2)
而不是UIView* subView = [[cell.contentView subviews]lastObject];
,您可以尝试将其命名为:
for(UIView *view in [cell subviews])
{
if([view isKindOfClass:[UITextfield class]]){
// view is the reference to your textfield
}
}
通过这种方式,您可以将其他UIView
添加为子视图,并且仍然可以获取文本字段的引用,而无需跟踪其子视图索引。
答案 3 :(得分:0)
我发生了两件事:
从长远来看,创建一个包含UITableViewCell
UITextField
的{{1}}会更容易,该{{1}}可作为属性访问。您可以使用nib来布局单元格,也可以在单元格init方法中以编程方式执行。这种方法将使您的代码更易于管理。
您需要考虑细胞重用。如果您正在重复使用单元格(您应该使用单元格),则需要在重新使用之前存储从文本字段中获取值。