我有两个问题。
第一个问题:
在我的项目中,我有两个不同的故事板文件:A storyboard
和B storyboard
。
我想将数据(nsstring
)从(A) controller of (A) storyboard
传递到(B) controller of (B) storyboard
我是怎么做到的?
第二个问题:
在第二个故事板中,我有两个与segue链接的控制器
当我用这条指令在代码中调用segue时:
[self.navigation controller performSegueWithIdentifier: @"secondViewSegue" sender:self];
我有一条消息:"has no segue with identifier 'secondViewSegue' "
为什么?
答案 0 :(得分:3)
1 /这样做的一个好方法是制作一个单独的模型对象,可以从两个位置同等地解决。 的最简单方法是将属性添加到@interface
文件的AppDelegate.h
部分,例如
@property (nonatomic, strong) NSString* sharedString;
要设置并获取它,您需要在任何需要它的文件中添加对AppDelegate的类型访问权限:
#include AppDelegate.h
然后你可以使用......
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//to set (eg in A controller)
appDelegate.sharedString = string;
//to get (eg in B controller)
NSString* string = appDelegate.sharedString;
作为属性的替代方法,您可以在头文件中使用静态变量:
static NSString* staticString;
#imports
头文件的任何对象都可以访问。虽然不是Objective-C的方式。
对于更复杂的案例,您可能需要创建一个单例对象来访问模型数据。
2 /尝试:
[self performSegueWithIdentifier: @"secondViewSegue" sender:self];
确保Segue是从您的viewController连接的,而不是它的导航控制器。
答案 1 :(得分:1)
在不同的故事板中,有两种方法可以在两个不同的视图控制器之间传递数据。我正在使用什么,我想分享
Swift 3
let storyboard = UIStoryboard(name: "StoryboardName2", bundle: nil)
let controller :NextViewController = storyboard.instantiateViewController(withIdentifier: "NextVCIdentifier") as! NextViewController
controller.NameofUser = Self.SelectedUser
将下一个viewcontroller中的变量声明为
public var NameofUser:String = ""