我想编写一个TableView,就像iOS7上的告警应用程序的告警视图一样。视图显示警报,用户打开并用开关关闭警报。
我有两个视图:一个TableView控制器显示警报,一个View控制器设置一个新的警报。当用户点击View上的ADD按钮时,它会通过TableView上的开关添加新的警报。
我有一个NSObject:"XYZAlarm“,其中包含两个NSString:NSString和descriptiveText。我在NSMutableArray的.h文件中声明了一个TableViewController:“警报”。
- (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放在一起。关于开关我有点糊涂了。如何编码开关功能以启用或禁用警报?以及如何存储每个开关的状态?
谢谢你的帮助!
编辑:我找到了解决方案here。谢谢大家!
发布于 2014-05-11 16:38:11
问题的核心是知道开关何时更改,以及开关在哪一行。您必须为每个开关的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];现在,您知道了单元格的索引路径(节和行),即已更改的开关的superview。所以,现在您可以将此更改存储在模型中。
确保每次调用cellForRowAtIndexPath:时都设置开关的状态,因为单元格被重用。
发布于 2014-05-11 16:34:14
XYZAlarm需要另一个属性BOOL,它用于存储任何您的开关意味着什么。配置单元格时,将开关的on属性设置为XYZAlarm上的新属性中的值。切换开关时,更新适当的警报对象的属性。
https://stackoverflow.com/questions/23595055
复制相似问题