viewWithTag: returns nil after reloadData
viewWithTag: returns nil after reloadData
我有 table视图,其中有 6 行是用自定义单元格制作的。
自定义单元格有一个 UILabel 和一个 UISwitch。
在方法 "cellForRowAtIndexPath:" 中我有:
static NSString *CellIdentifier = @"optionsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UISwitch *optionsSwitch = (UISwitch *)[cell viewWithTag:300];
UILabel *optionsLabel = (UILabel *) [cell viewWithTag:200];
NSLog(@"%@", optionsSwitch);
NSLog(@"%@", optionsLabel);
当 tableView 首次实例化时(从故事板)我正确地得到了两个对象(我只为 table 视图的第一行添加结果):
但是当我将 reloadData 方法发送到 tableView 时(UISwitch 状态可以通过编程方式更改,所以我在显示它之前更新 tableview)我正确地得到了 UILabel 而 UISwitch 是无:
为什么 UILabel 有效而 UISwitch 无效?
UISizeClasses 未启用,正如另一个 post 关于此问题的建议。
谢谢,科拉多
您在代码的其他地方更改了开关的标记,可能是为了在更改开关时可以从中获取行号。
你真的应该有一个自定义单元格,它有视图的出口,所以你根本不需要使用标签,单元格应该处理开关更改以更新模型或调用视图控制器的一些回调.
我有 table视图,其中有 6 行是用自定义单元格制作的。
自定义单元格有一个 UILabel 和一个 UISwitch。 在方法 "cellForRowAtIndexPath:" 中我有:
static NSString *CellIdentifier = @"optionsCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
UISwitch *optionsSwitch = (UISwitch *)[cell viewWithTag:300];
UILabel *optionsLabel = (UILabel *) [cell viewWithTag:200];
NSLog(@"%@", optionsSwitch);
NSLog(@"%@", optionsLabel);
当 tableView 首次实例化时(从故事板)我正确地得到了两个对象(我只为 table 视图的第一行添加结果):
但是当我将 reloadData 方法发送到 tableView 时(UISwitch 状态可以通过编程方式更改,所以我在显示它之前更新 tableview)我正确地得到了 UILabel 而 UISwitch 是无:
为什么 UILabel 有效而 UISwitch 无效?
UISizeClasses 未启用,正如另一个 post 关于此问题的建议。
谢谢,科拉多
您在代码的其他地方更改了开关的标记,可能是为了在更改开关时可以从中获取行号。
你真的应该有一个自定义单元格,它有视图的出口,所以你根本不需要使用标签,单元格应该处理开关更改以更新模型或调用视图控制器的一些回调.