如何基于Switch更新TableView

时间:2014-05-16 18:52:14

标签: ios uitableview

在我的ToDoList应用程序中,我有一个表视图,用户可以在其中添加他/她必须完成的项目。当他们点击他们创建的项目时,会将其发送到有切换的详细信息页面。如果切换开关,则应更新单元格,并且其背景颜色应为红色。我不知道如何从不同的页面访问该tableviewcell。这就是我到目前为止所做的:

if (switchToggle.on) {

    NSLog(@"The switch is on!");

    UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Item Updated" message:@"This item has been set to 'Urgent'" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:@"Cancel", nil];

    [myAlertView show];
}
else
{
    NSLog(@"The switch is off!");
}

所有帮助表示赞赏,提前致谢

1 个答案:

答案 0 :(得分:0)

当然,你应该有一个对象形式的数组,你可以在每个单元格中加载信息。

在对象类中,您应该拥有如下属性:

@property (assign, nonatomic, getter=isOn) BOOL on;

因此,当您访问详细信息视图控制器时,您应该传递此对象,例如:

detailsViewController.myObject = myArrayOfObject[indexPath.row];

因此,在切换时在控制器中,您可以在该属性中设置YESNO,并通过delegate 调用先前视图控制器中的方法重新加载单元格

使用委托模式是正确的方法。

但如果你愿意,你也可以这样做:

当您回来时,您必须重新加载tableViewCell,因此您需要在indexPath之前保存detailsViewController。因此,您可以将其保存在变量中,然后当您返回到上一个视图控制器时,在viewDidAppearviewWillAppear中:

if (savedIndexPath) {
    [myTable reloadRowsAtIndexPaths:@[savedIndexPath] withRowAnimation:YES];
}

或者您可以再次通过KVO观察该属性,并在更改属性时自动获取呼叫。

您有很多解决方案和设计模式可以帮助您。例如,请参阅DelegationKVO (Key Value Observing)