如何使用交换机编写一个UITableView,如Alarm App iOS7?

我想编写一个TableView比如iOS7上的Alarm App上的报警视图。 视图显示警报,用户打开并用开关closures警报。

我有2个视图:一个TableView控制器来显示警报和一个View控制器来设置一个新的警报。 当用户点击View Controller上的ADDbutton时,它会在TableView上添加一个新的开关。

我有一个NSObject :“XYZAlarm”,其中包含2个NSString :alarm和descriptiveText。 我有一个NSMutableArray :在TableViewController的.h文件中声明的“警报”。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"ListPrototypeCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; XYZAlarm *alarm = [self.alarms objectAtIndex:indexPath.row]; cell.textLabel.text = alarm.itemName; UISwitch *switchview = [[UISwitch alloc] initWithFrame:CGRectZero]; cell.accessoryView = switchview; return cell; } 

我将用NSUserDefaults存储报警。 关于交换机,我有点失落。 如何编码开关function来启用或禁用警报? 以及如何存储每个开关的状态?

谢谢你的帮助 !

编辑:我在这里find了解决scheme。 谢谢大家 !

问题的核心在于知道交换机何时发生变化以及交换机处于哪一行 。必须为每个交换机提供valueChanged的操作方法,以便您可以了解用户何时移动交换机。 但是你怎么知道这是哪一排? 以下是我喜欢的方式:

 UIView* v = sender; // sender is the switch sending `valueChanged` do { v = v.superview; } while (![v isKindOfClass: [UITableViewCell class]]); UITableViewCell* cell = (UITableViewCell*)v; NSIndexPath* ip = [self.tableView indexPathForCell:cell]; 

现在您知道已更改的交换机的超级视图的单元的索引path(节和行)。 所以现在你可以把这个改变存储在你的模型中。

每次调用cellForRowAtIndexPath: 都要确保设置开关的状态,因为单元格被重用。

XYZAlarm需要另一个属性BOOL,用于存储交换机的任何含义。 在configuration单元格时,将开关的属性设置为XYZAlarm上新属性的值。 当您切换开关时,请更新相应报警对象的属性。