实例化ViewControllerWithIdentifier并传递数据
我在我的应用程序中使用Storyboard
,我想将数据从一个视图传递到另一个视图。
而不是使用segues我使用instantiateViewControllerWithIdentifier
。 在这种情况下,我从我的第一个TableViewController
实例化到一个NavigationController
有第二个TableViewController
附加,因为我需要在第二个TableViewController
导航。 现在我想从我的第一个TableviewController
,根据哪一行被点击数据传递到我的第二个TableviewController
。 在这种情况下newTopViewController
将是我的NavigationController
但我的问题是现在如何将数据从firstTableViewController
传递到第二个secondTableviewController
。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = [NSString stringWithFormat:@"%@Top", [menuArray objectAtIndex:indexPath.row]]; UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; }
如果你实例化一个navigationController,你可以使用viewControllers
属性来获取导航控制器的内部viewController。
像这样的东西:
UINavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; MBFancyViewController *viewController = navigationController.viewControllers[0]; // setup "inner" view controller viewController.foo = bar; [self presentViewController:navigationController animated:YES completion:nil];
newTopViewController.anyVariableToShow= anyVariableToSend;
我经常在我的几个应用程序上做这个…
//创build新的VC
CookViewController *detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CookVC"]; //Set recipe [detailViewController setRecipe:recipe]; //Pop over VC (can be pushed with a nav controller) [self presentPopupViewController:detailViewController animationType:MJPopupViewAnimationFade];
如果您没有使用导航控制器或继续使用,那么我认为您需要重新考虑您的应用程序devise。
其实这不仅仅是一个数据传递的问题,因为这是一个程序控制和数据传输问题。 即使你不得不重新思考你的应用程序的概念,因为你想使用故事板没有故事板的含义,这取决于你,我希望你有充足的理由做你做的事情。
所以当你决定不使用segue的时候,你就失去了实例化一个新的控制器和传输数据的新的,舒适的方法,你必须在两个不同的步骤中进行控制和数据的传输。 当你在storyboard中实例化另一个场景(就像你使用instantiateViewControllerWithIdentifier :)你刚刚实例化一个新的控制器,并传递控制,但不是数据。 当你以旧的方式从xib实例化一个新的控制器的时候,考虑一下(所以你必须在第二个视图控制器中使用initWithCoder:或awakeFromNib,因为storyboard不会调用initWithName:bundle :),但是没有做更多的事情。
所以你将有一个新的控制器(它在第二个故事板的标识部分命名)挂在宇宙中,与其他任何东西没有任何关系或联系(如故事板图片很好地说明),你可以用它做什么我喜欢。
所以你想做一些事情,你需要从以前的故事板(视图控制器)的数据。 你需要的是将这些数据提供给第二个故事板(ViewController),并且如你所知,有很多解决scheme可以在故事板存在之前很长时间使用。
所以关于你的代码,“数据传输”取决于你的devise,两个控制器是否是彼此的子类或者是什么…
如果你不喜欢处理子类化,并想尽可能地解耦它们,最好的办法就是在第一个控制器中创build数据属性,并从第二个控制器中引用它们(在导入第一个.h文件之后)只需在它的viewDidLoad或initWithCoder中引用它:或者在你需要它的任何地方
secondViewControllerdata = firstViewControllerdata.thatDataProperty
当然你也可以在第二个控制器中做相同的操作,并在第一个控制器中引用它。
你可以在UIViewController中定义一些参数来接收数据:
@属性(分配)int param1;
@属性(保留)NSMutableArray * param2;
并使用下面的数据传递:
[newTopViewController setParam1:XX];
[newTopViewController setParam2:XX];
- 使用AVMutableVideoComposition时,AVMutableComposition的怪异行为被冻结
- 更新的Apple开发者网站将不允许添加设备到Ad Hoc Provisioning Profile 2013年4月
- IBOutlet链接到embedded式视图控制器
- iOS Storyboard:ViewController之外和场景之上的视图(First Responder和Exit框之间)
- XCode 7 – 错误的视图警告在故事板中查看
- 从表视图控制器中的静态单元中启动一个方法
- com.apple.InterfaceBuilder错误-1。 故事板不能打开
- Xcode Storyboard和xib连接
- 表格视图控制器的多个部分
- 从故事板中的UIViewController加载一个UIView不起作用
- 使用AutoLayout与Storyboard(不带XIB)的UICollectionViewCell的宽度和高度可变