!
当然,为了判断户是否触碰了导航栏上的back按钮,我们需要为导航控制器设置个代理对象。
作为导航控制器的代理对象,就会从导航控制器那了解到它何时将视图控制器push或pop到导航
视图堆栈上。AllListsViewController是该代理的合适选。
!
在Xcode中切换到AllListsViewController.h,然后在@interface这添加遵循代理协议声明:
!
@interface AllListsViewController : UITableViewController
<ListDetailViewControllerDelegate,UINavigationControllerDelegate>
!
看到这千万不要害怕,个视图控制器可以同时是多个对象的代理对象。如这的
AllListsViewController既是ListDetailViewController的代理对象,也是UINavigationController的代
理对象,同时还是UITableView的代理对象(不需要公开声明,因为它本就是个表视图控制
器)。
!
接下来在AllListsViewController.m中添加代理法的实现代码:
!
-(void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
if(viewController ==self){
[[NSUserDefaults standardUserDefaults]setInteger:-1 forKey:@"ChecklistIndex"];
}
}
!
每当导航控制器让应切换到个新的界时都会调该法。如果户触碰了back按钮,那么新
的视图控制器就是AllListsViewController,此时我们可以设置NSUserDefaults中的
ChecklistIndex值为-1,也就意味着没有选择任何的checklist
!
好了,还剩最后步。当应启动的时候,要确认需要显哪个checklist,然后动触发segue。
!
这个作我们会放在viewDidAppear中进。
!
在AllListsViewController.m中添加个viewDidAppear法:
!
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
self.navigationController.delegate = self;
NSInteger index =[[NSUserDefaults standardUserDefaults]integerForKey:@"ChecklistIndex"];
if(index != -1){
Checklist *checklist = self.dataModel.lists[index];