@在之前的几篇文章,已经介绍了storyboard页面之间的跳转和传值,对于那几种传值方法,其实与纯代码构建的页面传值是一个道理,都是可以用属性,代理,通知,block,单例等方法传值(具体可见iOS高级),storyboard只是帮我们简化了构建view的代码,整体的原理还是一样的,主要是获得跳转的那个ViewController对象即可,下面,我就给出种方式的关键代码:
2种的ID不一样,一种是中间连线那个圈圈里面的Identifier,一种是跳转页面的Storyboard ID
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
- {
- // self.selectedIndex = indexPath.row;
- // [self performSegueWithIdentifier:@"classDetail" sender:nil];
- /*---------------------------------第二种传值-----------------------------------------*/
- LOClassDetailTableViewController *classDeatailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"LOClassDetailTableViewController"];
- classDeatailVC.loClass = self.loClasses[indexPath.row];
- [self.navigationController pushViewController:classDeatailVC animated:YES];
- /*---------------------------------第一种传值(1)-----------------------------------------*/
- self.selectedIndex = indexPath.row;
- [self performSegueWithIdentifier:@"classDetail" sender:self];
- }
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
- {
- // Get the new view controller using [segue destinationViewController].
- // Pass the selected object to the new view controller.
- /*---------------------------------第一种传值(2)-----------------------------------------*/
- LOClassDetailTableViewController *classDetailVC = segue.destinationViewController;
- NSLog(@"---%ld",self.selectedIndex);
- classDetailVC.loClass = self.loClasses[self.selectedIndex];
- }
一个没有导航栏(有的直接push想要那个viewController就行,会统一自带)的viewController模态推出一个在storyboard中拖入的UINavigationController,如何找到导航控制器下的viewController,给予UINavigationController的storyboardID就行
- UINavigationController *deatilNC = [self.storyboard instantiateViewControllerWithIdentifier:@"MDCDeatilBusinessNiewController"];
- // 导航控制器有属性viewControllers,就跟标签控制器一样
- MDCDeatilBusinessViewController *deatilVC = deatilNC.viewControllers[0];
- [self presentViewController:deatilNC animated:YES completion:nil];
- 多个storyboard之间沟通只能手写
- UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil];
- UIViewController *firstVC = [secondStoryboard instantiateViewControllerWithIdentifier:@"firstVC"];
- [self.navigationController pushViewController:firstVC animated:YES];
@QQ的登录,注册,找回密码用一个storyboard;登录成功后的主界面的链接用一个storyboard
- // 多个storyboard的衔接
- if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAuthenticated"] == NO) {
- UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
- UIViewController *viewController = [mainStoryboard instantiateInitialViewController];
- [UIApplication sharedApplication].keyWindow.rootViewController = viewController;
- }