我有一个表视图,只要找到新的外围设备就会重新加载。 我在每个单元格上都有一个按钮。此按钮允许将外围设备添加到阵列。现在添加按钮后,我想将其更改为取消,这就是我所做的。这里的问题是,表总是重新加载,因此按钮总是返回到初始状态(ADD)。 有什么解决方案吗?
答案 0 :(得分:1)
在tableView:cellForRowAtIndexPath:
if ([self.arrayOfPeripherals containsObject:peripheralForCell])
[cell.button setTitle:@"Cancel" forState:UIControlStateNormal];
else
[cell.button setTitle:@"Add" forState:UIControlStateNormal];
self.arrayOfPeripherals
是你的外围阵列,
peripheralForCell
是indexPath
答案 1 :(得分:1)
您的表格单元格应反映数据模型中的项目状态。每次重新加载表时,由于表视图通过其委托要求单元格,您应该为每个单元格设置反映当前状态所需的信息。听起来您只是在活动单元格中跟踪状态,而不是在数据模型中保持整体状态。
因此,当通过表视图询问给定indexPath的单元格时:
1)为请求的indexPath出列单元格。
2)设置单元格,使其知道数据模型的哪个部分是视图。单元格中的显示/按钮应反映数据模型中的内容。
3)在按钮中,使目标操作更新数据模型而不是单元格。
4)如果单元格中的按钮更改了数据模型,则只重新加载该行而不是整个表格。重新加载行将导致表格要求新单元格现在将反映您的数据模型。
这将使您的单元格不受表重新加载的影响,因为您现在正在正确地跟踪状态。
答案 2 :(得分:0)
我假设您将pheripheral
存储到NSMutableArray
。找到新的pheripheral后,您将其添加到NSMutableArray
。在执行此操作时,您需要将isPheripheralAdded
键存储在每个pheripheral
内容中。
isPheripheralAdded
有boolean
类型。
isPheripheralAdded
内容,初始False
flage为pheripheral
。用户点击Add
按钮后。 isPheripheralAdded
标志已更新为True
并更新NSMutableArray
中的所选索引内容。
现在,只有那些您添加的人isPheripheralAdded = True
。其他人有isPheripheralAdded = False
。
现在reload table
,在您cellForRowAtIndexPath
中添加以下代码。
if (isPheripheralAdded == True)
[cell.button setTitle:@"Cancel" forState:UIControlStateNormal];
else
[cell.button setTitle:@"Add" forState:UIControlStateNormal];
希望这对你有所帮助。
答案 3 :(得分:0)
我建议你创建一个对象并在数组中插入对象(如果你还没有这样做)。然后为此对象创建BOOL showCanceled
。只要外围设备添加,然后对该对象进行更改(在为TableView加载的阵列上)并设置showCanceled = YES
。加载TableView时,请检查showCanceled的状态并进行设置。
if (showCanceled == YES)
[cell.button setTitle:@"Cancel" forState:UIControlStateNormal];
else
[cell.button setTitle:@"Add" forState:UIControlStateNormal];