我对表格视图有疑问。我在表格视图单元格中放置了一个标签和开关。我默认将开关值设置为 NO。现在,当在模拟器中加载表视图时,表视图会显示带有 NO 值的开关。现在我选择开关值为YES。但是表格视图使用出列可重用单元格方法 滚动表格视图时的属性 现在每次都会重新加载对象 开关值是 NO 还是 YES?
问问题
232 次
3 回答
1
是的。滚动表格视图的另一件事是它不调用 reload 方法。如果您使用双端队列可重用单元格方法属性,它只是重用已创建的表格视图单元格。
于 2012-10-21T06:55:21.423 回答
-1
保证没有重复的单元格:在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
如下 :
for(UIView *v in [cell subviews])
{
if([v isKindOfClass:[UILabel class]] ||[v isKindOfClass:[UISwitch class]])
[v removeFromSuperview];
}
于 2012-10-21T08:44:24.583 回答
-1
当表格视图滚动时,TableViewCells 会在必要时被销毁和创建。
当一个单元格在离开可见屏幕区域时被破坏时,作为单元格子视图的开关控件也会被破坏。
因此,当您滚动回之前设置的开关之一时,您实际上看到的是 UITableViewCell 的另一个实例,其中添加了一个开关视图,因此看起来开关值变回了 NO。
您需要的第三件事是记住每行中每个开关的值应该是什么。如果您要显示核心数据实体信息表,那么也许您可以为您的实体定义一个属性,例如“活动”。在这种情况下,每次更改开关值时,都会将核心数据实体“活动”属性设置为开关值,例如:
-(UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
if(cell == nil)
{
// set switch control tag number (don't use 0)
}
// get switch control by tag number
// pseudocode
Engine *myEngine = [arrEngine objectAtIndex:indexPath.row];
mySwitchControl.active = myEngine.active;
...
}
// when you change switch value, remember to update your core data entity value
-(void)updateSwitchValue:(BOOL) newValue
{
// update value
}
否则,您可以简单地使用布尔值的 NSMutableArray 来确定每个开关的哪一行应该是 YES 或 NO:
// my header file (.h file)
@interface
{
NSMutableArray *arrSwitchValues;
}
// my implementation file (.m file)
-(UITableViewCell *)tableView:(UITableView)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
...
if(cell == nil)
{
// set switch control tag number (don't use 0)
}
// get switch control by tag number
// pseudocode
BOOL switchVal = [arrSwitchValues objectAtIndex:indexPath.row];
mySwitchControl.active = switchval;
...
}
// when you change switch value, remember to update your array
-(void)updateSwitchValue:(BOOL) newValue
{
// update value
}
希望有帮助。
于 2012-10-21T08:01:11.547 回答