我有两个ViewControllers,它们没有(直接)与Segue连接。但我想在第二个VC中更改一个字符串,我在第一个中获取。我的尝试是:
#import "secondViewController.h"
@interface firstViewController ()
@property NSString* originalString;
@end
@implementation firstViewController
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
secondViewController* svc = [secondViewController new];
svc.anotherString = self.originalString;
}
但它起作用了,因为我只创建了第二个VC的实例,所以没有保存该值。我也不能使用Storyboard ID,因为我使用的是Xcode 5.
我有一个menuVC,你可以从中获得firstVC和secondVC。从第一个VC我可以返回(使用navigationbackbarbutton)到菜单。 so:menu-> firstVC->菜单。菜单 - > secondVC-> ...->菜单
我尝试使用StoryboardID:
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
secondViewController* svc =[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"secondVCSrorybradID"];
svc.anotherString = self.originalString;
}
答案 0 :(得分:11)
您可以使用此代码将字符串传递给第二个视图控制器。
secondViewController* svc =[self.storyboard instantiateViewControllerWithIdentifier:@"Your Second VC's Storyboad ID"];
svc.anotherString = self.originalString;
[self presentViewController:svc animated:YES completion:nil];
//你必须在第二个View Controller的.h文件中创建anotherString属性。
现在你可以将originalString的字符串输入到第二个VC。现在,您可以将此值从第二个VC返回到第一个VC。
希望这会对你有所帮助。
答案 1 :(得分:2)
您应该通过UIViewController
导航连续传递数据。例如,如果您有FirstVC > SecondVC > ThirdVC
的导航:
在FirstVC.m中,使用:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
((SecondVCClass*) segue.destinationViewController).secondVCString = _firstVCString;
}
secondVCString
在第二个ViewController中为@property
。
在SecondVC.m中,使用:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
((ThirdVCClass*) segue.destinationViewController).thirdVCString = _secondVCString;
}
当然thirdVCString
在你的第三个ViewController中是@property
。
修改强>
当您更新问题时,我建议这样做:
在您的MenuVC中,添加:
@property (nonatomic, weak) NSString *importantString;
在您的FirstVC和SecondVC中,添加以下内容:
@property (nonatomic, weak) MenuVCClass *menu;
当您推送到FirstVC或SecondVC时,使用prepareForSegue
将目标的视图控制器menu
属性设置为您的菜单:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"FirstSegue"])
((FirstVC*) segue.destinationViewController).menu = self;
else if ([segue.identifier isEqualToString:@"SecondSegue"])
((SecondVC*) segue.destinationViewController).menu = self;
}
在FirstVC或SecondVC中,您可以使用NSString
_menu.importantString = @"";
值
答案 2 :(得分:1)
永远不要使用new
来创建视图控制器。
如果您正在使用故事板但不使用segues,您仍然可以从故事板创建视图控制器并调用它。
使用方法instantiateViewControllerWithIdentifier:
创建目标视图控制器的实例。设置要设置的属性,最后调用以显示它(以模态方式呈现,将其推送到导航堆栈,或适合您的程序的任何内容。)