我在我的应用程序中使用Storyboard
,我想将数据从一个视图传递到另一个视图。
我使用的是instantiateViewControllerWithIdentifier
,而不是segues。在本例中,我从第一个TableViewController
实例化到一个附加了第二个TableViewController
的NavigationController
,因为我需要第二个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];
}
发布于 2013-04-07 15:35:04
如果实例化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];
发布于 2013-04-05 20:02:02
newTopViewController.anyVariableToShow= anyVariableToSend;
我经常在我的几个应用程序上这样做。
//新建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];
如果你没有使用导航控制器或segues,那么我认为你需要重新考虑你的应用程序设计。
发布于 2013-04-07 21:41:26
实际上,这不仅仅是一个数据传递问题,因为这是一个程序控制和数据传输的问题。即使你不得不重新思考你的应用程序的概念,因为你想使用没有故事板意义的故事板,这取决于你,我希望你有很好的理由去做你所做的事情。
因此,当您决定不使用segue时,您就失去了实例化新控制器并使用它传输数据的新的、舒适的方法,您必须在两个不同的步骤中完成控制和数据的传输。当您在storyboard中实例化另一个场景时(就像您对instantiateViewControllerWithIdentifier:所做的那样),您只是实例化了一个新的控制器并传输了控件,但没有传输数据。可以这样想:您用旧方法从xib实例化了一个新控制器(因此,您必须在第二个视图控制器中使用initWithCoder:或awakeFromNib,因为故事板不会调用initWithName:bundle:),但没有做更多的事情。
所以你将有一个新的控制器(它在第二个故事板的标识部分命名),它挂在宇宙中,与任何其他东西没有任何关系或联系(正如故事板图片很好地说明了它),你可以随心所欲地使用它。
所以你想做一些事情,你需要来自上一个故事板(ViewController)的数据。你需要的是将这些数据提供给第二个故事板(ViewController),正如你所知道的,在故事板出现之前很长一段时间内,就已经有很多解决方案了。
因此,关于你的代码,“数据传输”取决于你的设计,这两个控制器是彼此的子类还是其他什么……
如果您不喜欢处理子类化,而是希望尽可能地将它们解耦,那么最好的方法就是在第一个控制器中为数据创建一个属性,并在第二个控制器中引用它们(在导入第一个控制器的.h文件之后),然后在它的viewDidLoad或initWithCoder中引用它:或者在需要它们的任何地方,如下所示
secondViewControllerdata = firstViewControllerdata.thatDataProperty
当然,您也可以反过来做同样的事情,为第二个控制器创建一个属性,并在第一个视图控制器中引用它。
https://stackoverflow.com/questions/15832706
复制相似问题