如何在情节提要中的 2 个视图控制器之间传递数据?
Posted
技术标签:
【中文标题】如何在情节提要中的 2 个视图控制器之间传递数据?【英文标题】:How to pass data between 2 view controllers in storyboards? 【发布时间】:2013-11-11 12:19:34 【问题描述】:假设我们有 2 个名为 ViewControllerA 的视图控制器 和 ViewControllerB。
当我不使用情节提要时,我有以下初始化机制。
//ViewControllerA.h
@interface ViewControllerA : UIViewController
@end
//ViewControllerA.m
@implementation ViewControllerA
- (IBAction)showViewControllerB:(id)sender
ViewControllerB *vcB = [[ViewControllerB alloc] initWithTitle:@"Test"];
[self.navigationController pushViewController:vcB animated:YES];
@end
//ViewControllerB.h
@interface ViewControllerB : UIViewController
- (id)initWithTitle:(NSString *)title;
@end
//ViewControllerB.m
@interface ViewControllerB()
@property (nonatomic, retain) NSString *title;//Private scope.
@end
@implementation ViewControllerB
- (id)initWithTitle:(NSString *)title
self = [self init];
if(self)
_title = title;
return self;
@end
如何在不在公共范围 (ViewControllerB.h) 中声明 title 属性的情况下使用情节提要实现此目的?
提前致谢。
【问题讨论】:
您说“使用情节提要实现这一目标”是什么意思? @Popeye 是的,但没有在 .h 文件中声明 ViewControllerB 的 title 属性。如上例所述,它应该在 .m 文件(私有范围)中。 你的问题一点都不清楚。 @Popeye,您需要从上述问题中得到什么澄清?我可以解释我的问题。 好吧,我们知道您想要一个私有财产或来自 cmets 的 o_O 东西,但是您在问题中的什么地方这么说,这与故事板有什么关系?你的问题没有意义。 【参考方案1】:您可以使用KVC 访问该属性。
- (IBAction)showViewControllerB:(id)sender
ViewControllerB *viewcontroller = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerB"]; // corresponding to the storyboard identifier
[viewcontroller setValue:@"Hello World" forKey:@"title"];
[self.navigationController pushViewController:viewcontroller animated:YES];
【讨论】:
【参考方案2】:如果您确实需要将属性保密,您可以使用objc_setAssociatedObject
将数据附加到vcB
对象。或者您可以将属性保存在 AppDelegate 中,并在 ViewControllerB 初始化时从那里获取它。
【讨论】:
【参考方案3】:UIStoryboard *storyboard=self.storyboard;
ViewControllerB *vc=(ViewControllerB*)[storyboard instantiateViewControllerWithIdentifier:@"Scene_Id"];
[vc setTitle:@"your Text"];
[self.navigationController pushViewController:vc animated:YES];
【讨论】:
请检查我的问题,title 属性必须在 ViewControllerB.m 文件中,而不是在 .h 文件中(私有范围)。以上是关于如何在情节提要中的 2 个视图控制器之间传递数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用情节提要时使用 UITabBarController 在视图之间传递数据
如何在多个 .xib 文件之间执行展开转场(不使用情节提要)