首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用像警报应用程序iOS7这样的开关对UITableView进行编码?

如何用像警报应用程序iOS7这样的开关对UITableView进行编码?
EN

Stack Overflow用户
提问于 2014-05-11 16:24:15
回答 2查看 357关注 0票数 0

我想编写一个TableView,就像iOS7上的告警应用程序的告警视图一样。视图显示警报,用户打开并用开关关闭警报。

我有两个视图:一个TableView控制器显示警报,一个View控制器设置一个新的警报。当用户点击View上的ADD按钮时,它会通过TableView上的开关添加新的警报。

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

代码语言:javascript
复制
- (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。谢谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-11 16:38:11

问题的核心是知道开关何时更改,以及开关在哪一行。您必须为每个开关的valueChanged提供一个操作方法,以便您能够了解用户何时移动该开关。但是你怎么知道这是哪一行的开关呢?我喜欢这样做:

代码语言:javascript
复制
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:时都设置开关的状态,因为单元格被重用。

票数 0
EN

Stack Overflow用户

发布于 2014-05-11 16:34:14

XYZAlarm需要另一个属性BOOL,它用于存储任何您的开关意味着什么。配置单元格时,将开关的on属性设置为XYZAlarm上的新属性中的值。切换开关时,更新适当的警报对象的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23595055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档