我有一个包含三个页面的iPhone应用程序,每个页面都允许用户输入一些文本。在最后一页上,我想连接所有三个字符串并将其打印出来。我为每个页面都有一个UIViewController
(名为PageXController
),我正在尝试将变量传递到最后一页。我目前尝试的方法并不是很有效。这是一个例子:
我首先在PageThreeController.h
@interface PageThreeController : UIViewController{
NSMutableString *string;
}
@property (nonatomic) NSMutableString *string;
接下来,我将以下内容添加到PageOneController.h
,
#import "PageThreeController.h"
@interface PageOneController : UIViewController
@property (nonatomic) PageThreeController *pageThree;
在PageOneController
中,然后我尝试在第3页设置字符串实例变量;
- (IBAction)handleButton:(id)sender {
_pageThree = [[PageThreeController alloc] init];
_pageThree.from = [[NSMutableString alloc]init];
[_pageThree.from appendString:@"Hello World"];
NSLog(@"My string is %@ on page one.", _pageThree.from);
}
第一页上的NSLog
打印出我的字符串为'Hello World'
。但是当我在连接之前在PageThreeController.m
上添加相同的NSLog时,'string'
为NULL
。
似乎我正在制作pageThreeViewController
的单独副本。在第3页上我需要做些什么来更改字符串的实际值?我真的很擅长这个
答案 0 :(得分:0)
自定义prepareForSegue方法,以便通过这些控制器的公共属性传递必要的变量。 例如:
#pragma mark - PreparaForSegue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"goToDetail"]) {
YourDestinationController *destinationController = segue.destinationViewController;
destinationController.myString = self.myStringToPass;
}
}
其中myString是YourDestinationController中的公共属性,myStringToPass是源控制器中的属性(它可能位于私有范围内)
答案 1 :(得分:0)
如果您需要从任何地方访问它,您可以将变量存储在AppDelegate中。所以如果你的AppDelegate中有这样的变量:
@property (nonatomic) NSString *currentStringToPass;
然后,您可以使用以下代码从ViewControllers访问它:
- (IBAction)handleButton:(id)sender {
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
_pageThree = [[PageThreeController alloc] init];
_pageThree.from = [[NSMutableString alloc]init];
[app setCurrentStringToPass:@"Hello World"];
NSLog(@"My string is %@ on page one.", [app currentStringToPass]);
}
答案 2 :(得分:0)
在ViewControllers之间传递数据的最简单方法是使用AppDelegate,尽管如此 还有其他方法。
方法1 - 使用AppDelegate。 在Appdelegate中添加以下行。
@property (strong,nonatomic) NSMutableString *str;
要从任何视图控制器访问变量,
MyAppdeleagte appDelegate=[[UIApplication sharedApplication]delegate];
NSMutableString *Stringdata=appDelegate.str;
方法2 - 指定对象。 在这种方法中,您可以像现在一样继续进行,只需要指定 查看控制器实例。
让你从一个控制器导航到另一个控制器,比如FirstController到Second。 Firstcontroller.h
@interface FirstController : UIViewController{
NSMutableString *string;
}
@property (nonatomic) NSMutableString *string;
SecondController.h
@interface SecondController : UIViewController{
}
@property (strong,nonatomic) FirstController *firstScreen;
在FirstController的实现中,在导航到SecondController之前,必须在SecondController中指定实例。
在FirstController.m中
SecondController *nextScreen=[self.storyboard instantiateViewControllerWithIdentifier:@"SecondView"];
nextScreen.firstScreen=self;
然后在SecondController.m中,您可以简单地将String作为
_firstScreen.string;