swift 模态

平时大家跳转页面,我们模态跳转到某个页面使用

[selfpresentViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#> completion:<#^(void)completion#>]

返回时使用对应的返回方法

[selfdismissViewControllerAnimated:YEScompletion:nil];

push跳转页面使用

[self.navigationController pushViewController:<#(nonnull UIViewController *)#> animated:<#(BOOL)#>]

对应的返回方法为

[self.navigationControllerpopViewControllerAnimated:YES];

这里提出一个场景:从页面A可以模态跳转到公共页面M,从页面B也可以push跳转到页面M,那么页面M相应的返回按钮应该怎么实现,这里我给出一个解决方案:

给公共页面M声明一个属性:

@property(nonatomic,assign)BOOLmark;

//a.从页面A跳转到公共页面M

M* mainDetailVC = [[Malloc]init];

mainDetailVC.mark=YES;

UINavigationController*navc = [[UINavigationControlleralloc]initWithRootViewController:mainDetailVC];

[selfpresentViewController:navcanimated:YEScompletion:nil];

//b.从页面B跳转到公共页面M

M* mainDetailVC = [[Malloc]init];

[self.navigationControllerpushViewController:mainDetailVCanimated:NO];

最后一步:在控制器M中实现返回按钮,需要两种返回方法

- (void)viewWillAppear:(BOOL)animated {

//判断是模态过来的还是push过来的,对应创建相应的返回按钮及方法

if(self.mark==YES) {

UIBarButtonItem*btn = [[UIBarButtonItemalloc]initWithTitle:@"返回"style:(UIBarButtonItemStylePlain)target:selfaction:@selector(clickback:)];

self.navigationItem.leftBarButtonItem= btn;

}

else{UIBarButtonItem*btn = [[UIBarButtonItemalloc]initWithTitle:@"返回"style:(UIBarButtonItemStylePlain)target:selfaction:@selector(clickbacktwo:)];

self.navigationItem.leftBarButtonItem= btn;

}

}

//模态返回方法,如果是模态过来的就会使用此方法返回

- (void)clickback:(UIBarButtonItem*)but {

[selfdismissViewControllerAnimated:YEScompletion:nil];

}

//pop返回方法,如果是push过来的就会使用此方法

- (void)clickbacktwo:(UIBarButtonItem*)but {

[self.navigationControllerpopViewControllerAnimated:YES];

}

你可能感兴趣的:(swift 模态)