将Button添加到常量可更改的表视图中

时间:2015-04-17 08:24:32

标签: ios xcode uibutton tableview tableviewcell

我有一个表视图,只要找到新的外围设备就会重新加载。 我在每个单元格上都有一个按钮。此按钮允许将外围设备添加到阵列。现在添加按钮后,我想将其更改为取消,这就是我所做的。这里的问题是,表总是重新加载,因此按钮总是返回到初始状态(ADD)。 有什么解决方案吗?

4 个答案:

答案 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内容中。

isPheripheralAddedboolean类型。

对于所有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];