Tableview 文本字段中的 iOS 在 for 循环中获取值在 ios 7 中不起作用,但在 iOS 8 中起作用
Posted
技术标签:
【中文标题】Tableview 文本字段中的 iOS 在 for 循环中获取值在 ios 7 中不起作用,但在 iOS 8 中起作用【英文标题】:iOS in Tableview textfield get value in for loop is not working in ios 7 but its working in iOS 8 【发布时间】:2015-01-07 14:02:05 【问题描述】:我在单击按钮时获得了 tableview 文本字段值,我尝试了很多但我无法获得值请帮助我这里是我的代码它总是打印空值,这个 for 循环运行在 单击“打开”按钮,但此代码在 ios 7 模拟器中无法使用,但可以在 ios 8 中使用,请帮助我
for (int k=0; k< aryModifier.count; k++)
// NSLog(@"--%d",i);
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:k inSection:0];
UITableViewCell *cell = [[self tbl_itemModifier] cellForRowAtIndexPath:indexPath];
UITextField *getTextView = (UITextField*)[cell.contentView viewWithTag:200];
//for (UIView *subView in cell.subviews)
for (UIView *subView in cell.contentView.subviews)
if ([subView isKindOfClass:[UITextField class]])
UITextField *txtField = (UITextField *)subView;
NSLog(@"%@",txtField.text);
//UITextField *getTextView = (UITextField*)[cell.contentView viewWithTag:i];
NSLog(@"%@",getTextView.text);
和索引路径处的表格 Cellforrow
UITextField *txt=[[UITextField alloc]initWithFrame:CGRectMake(180, 40, 50, 15)];
txt.text = @"1";
txt.textAlignment = NSTextAlignmentCenter;
txt.font=[UIFont systemFontOfSize:12];
txt.textColor = [UIColor blackColor];
txt.tag = 200;//indexPath.row;
txt.delegate = self;
NSString *str = txt.text;
[cell addSubview:txt];
我尝试了两种方式,但我无法获得成功。请帮帮我.........
//for (UIView *subView in cell.subviews)
for (UIView *subView in cell.contentView.subviews)
请给我解决方案... 如果您有任何演示链接,请与我分享
【问题讨论】:
【参考方案1】:您使用的方法存在几个问题:
-
在
tableView:cellForRowAtIndexPath:
中创建新控件是不好的做法。正确的 MVC 将指示将该创建移动到您的 UITableViewCell
的 init
或 initWithCoder:
方法。在tableView:cellForRowAtIndexPath:
方法中执行此操作极有可能导致多个控件被添加到一个单元格,因为该单元格被回收。该方法实际上仅适用于单元配置,不适用于视图层次结构的创建/管理。
迭代UITableViewCell
对象是个坏主意。原因是 iOS 在创建 UITableViewCell
用于显示的实例时会积极管理内存消耗。它尽可能频繁地回收细胞。因此,如果您有一个包含许多单元格的表格视图,那么在任何给定时间只有一小部分可用。您应该使用外部数据源来提供表格视图用来填充其单元格的数据。您还应该使用它来获取您需要的数据,而不是依赖UITableViewCell
中的控件来获取该数据。
问你几个问题:
- 你目前如何填充你的细胞?
- 单元格中是否显示其他数据,或者它们只是UITextField
实例的滚动集?
- 这基本上只是一个可滚动的形式吗?
假设(基于提供的有限证据)您正在尝试实施表单,以下是我的建议:
-
不要使用
UITableView
。我知道这很诱人,因为它可以很好地处理键盘显示/隐藏,并且(有时)会自动滚动到选定的控件,但它实际上是在尝试将方形钉安装在圆孔中。这不是UITableView
要做的事情。相反,学习如何在UIScrollView
中正确实现表单。特别是,当我采用“全自动布局实现”方法时,这对我来说变得容易得多。最初的设置有点复杂,但它的效果要好得多,并且使像您这样的任务更加合乎逻辑。
如果您必须使用UITableView
,请找出一种将数据即时保存到用于填充UITableView
的单独数据源的方法。这样,当单元格被回收时,您可以使用正确的数据刷新它们,并且当您需要访问输入的数据时,您无需迭代 UITableViewCell
实例(这样做相当“昂贵”)。
【讨论】:
【参考方案2】:更改以下代码行:
UITextField *getTextView = (UITextField*)[cell.contentView viewWithTag:200];
到
UITextField *getTextView = (UITextField*)[cell viewWithTag:200];
希望这会有所帮助..
【讨论】:
以上是关于Tableview 文本字段中的 iOS 在 for 循环中获取值在 ios 7 中不起作用,但在 iOS 8 中起作用的主要内容,如果未能解决你的问题,请参考以下文章
Tableview 文本字段中的 iOS 在 for 循环中获取值在 ios 7 中不起作用,但在 iOS 8 中起作用