iOS 在 Tableview 文本字段中获取 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
我在单击按钮时获得了 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);
}
和 Table 索引路径处的 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)
请给我解决办法...
如果你有任何演示 link 请与我分享
您使用的方法存在几个问题:
- 在
tableView:cellForRowAtIndexPath:
中创建新控件是不好的做法。正确的 MVC 会指示将该创建移动到您的 UITableViewCell
的 init
或 initWithCoder:
方法。在 tableView:cellForRowAtIndexPath:
方法中执行此操作极有可能导致在回收该单元格时将多个控件添加到该单元格。该方法实际上仅适用于单元格 配置 ,不适用于视图层次结构 creation/management.
- 迭代
UITableViewCell
对象是个坏主意。原因是 iOS 在创建 UITableViewCell
显示实例时积极管理内存消耗。它尽可能频繁地回收细胞。因此,如果您有一个包含许多单元格的 table 视图,那么在任何给定时间只有一小部分单元格可用。您应该使用外部数据源来提供 table 视图用来填充其单元格的数据。您还应该使用它来获取所需的数据,而不是依赖 UITableViewCell
中的控件来获取该数据。
问你几个问题:
- 你目前如何填充你的细胞?
- 是否有其他数据显示在单元格中,或者它们只是一组滚动的 UITextField
个实例?
- 这基本上只是一个可滚动的表格吗?
假设(基于所提供的有限证据)您正在尝试实现一个表单,以下是我的建议:
- 不要使用
UITableView
。我知道它很诱人,因为它可以很好地处理键盘 show/hide 并且(有时)会提供对所选控件的自动滚动,但它实际上是在尝试将方形钉放入圆孔中。这不是 UITableView
要做的事情。相反,学习如何在 UIScrollView
中正确实现表单。特别是,当我采用 "full auto layout implementation" 方法时,这对我来说变得容易多了。最初设置起来有点复杂,但效果更好,并且使像您这样的任务更合乎逻辑。
- 如果您必须使用
UITableView
,想办法将数据即时保存到用于填充您的UITableView
。这样,当单元格被回收时,您可以使用正确的数据刷新它们,并且当您需要访问输入的数据时,您无需迭代 UITableViewCell
个实例(这相当 "expensive" 要做) .
更改以下代码行:
UITextField *getTextView = (UITextField*)[cell.contentView viewWithTag:200];
至
UITextField *getTextView = (UITextField*)[cell viewWithTag:200];
希望这对您有所帮助..
我在单击按钮时获得了 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);
}
和 Table 索引路径处的 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)
请给我解决办法... 如果你有任何演示 link 请与我分享
您使用的方法存在几个问题:
- 在
tableView:cellForRowAtIndexPath:
中创建新控件是不好的做法。正确的 MVC 会指示将该创建移动到您的UITableViewCell
的init
或initWithCoder:
方法。在tableView:cellForRowAtIndexPath:
方法中执行此操作极有可能导致在回收该单元格时将多个控件添加到该单元格。该方法实际上仅适用于单元格 配置 ,不适用于视图层次结构 creation/management. - 迭代
UITableViewCell
对象是个坏主意。原因是 iOS 在创建UITableViewCell
显示实例时积极管理内存消耗。它尽可能频繁地回收细胞。因此,如果您有一个包含许多单元格的 table 视图,那么在任何给定时间只有一小部分单元格可用。您应该使用外部数据源来提供 table 视图用来填充其单元格的数据。您还应该使用它来获取所需的数据,而不是依赖UITableViewCell
中的控件来获取该数据。
问你几个问题:
- 你目前如何填充你的细胞?
- 是否有其他数据显示在单元格中,或者它们只是一组滚动的 UITextField
个实例?
- 这基本上只是一个可滚动的表格吗?
假设(基于所提供的有限证据)您正在尝试实现一个表单,以下是我的建议:
- 不要使用
UITableView
。我知道它很诱人,因为它可以很好地处理键盘 show/hide 并且(有时)会提供对所选控件的自动滚动,但它实际上是在尝试将方形钉放入圆孔中。这不是UITableView
要做的事情。相反,学习如何在UIScrollView
中正确实现表单。特别是,当我采用 "full auto layout implementation" 方法时,这对我来说变得容易多了。最初设置起来有点复杂,但效果更好,并且使像您这样的任务更合乎逻辑。 - 如果您必须使用
UITableView
,想办法将数据即时保存到用于填充您的UITableView
。这样,当单元格被回收时,您可以使用正确的数据刷新它们,并且当您需要访问输入的数据时,您无需迭代UITableViewCell
个实例(这相当 "expensive" 要做) .
更改以下代码行:
UITextField *getTextView = (UITextField*)[cell.contentView viewWithTag:200];
至
UITextField *getTextView = (UITextField*)[cell viewWithTag:200];
希望这对您有所帮助..