使用 Modal Segue 保留复选标记
Posted
技术标签:
【中文标题】使用 Modal Segue 保留复选标记【英文标题】:Retain Check Marks with Modal Segue 【发布时间】:2014-03-14 18:09:40 【问题描述】:我是 x-code 的新手,我想知道:是否可以通过模态 segue 保留复选标记?
我会在我的清单上打勾:
但是当我按下完成然后以模态segue返回屏幕时,它会显示如下:
尽管我以模态方式更改视图,是否可以保留这些复选标记?
我有这个代码来创建复选标记:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// Return the number of sections.
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// Return the number of rows in the section.
return [self.toDoItems count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"ListPrototypeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
NewItem *toDoItem = [self.toDoItems objectAtIndex:indexPath.row];
cell.textLabel.text = toDoItem.itemName;
if (toDoItem.completed)
cell.accessoryType = UITableViewCellAccessoryCheckmark;
else
cell.accessoryType = UITableViewCellAccessoryNone;
return cell;
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
[tableView deselectRowAtIndexPath:indexPath animated:NO];
NewItem *tappedItem = [self.toDoItems objectAtIndex:indexPath.row];
tappedItem.completed = !tappedItem.completed;
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
【问题讨论】:
【参考方案1】:当您弹出或关闭视图控制器时,该视图控制器消失了。但是,您有几个选项可以记住视图控制器所处的状态。最简单的方法可能是存储一个全局变量,可能是一个NSArray
,以记住检查的项目。然后,当您加载此视图控制器时,您可以“检查”该 NSArray
中存在的任何项目。
请注意,此方法仅在应用打开的生命周期内有效。如果他们关闭应用程序,它就会消失。如果您想在他们下次打开应用程序时保留“已检查”项目,您需要将其存储在NSUserDefaults
- 那里的数据在应用程序从手机中删除之前可用。
【讨论】:
感谢您的帮助。我想我会尝试使用 NSUserDefaults 以便在应用程序多次启动时保留复选标记:)以上是关于使用 Modal Segue 保留复选标记的主要内容,如果未能解决你的问题,请参考以下文章
Storyboard 中的 Modal 和 Push segue 有啥区别?
使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)
如何在 Modal Segue 的过渡中添加完整的卷曲效果?