[英]Sharing a variable between ViewControllers
我有一個包含三個頁面的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
嘗試在PageOneController
頁上設置字符串實例變量。
- (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
的單獨副本。 我該怎么做才能在第三頁上更改字符串的實際值? 我真的很新
自定義您的prepareForSegue方法,以通過這些控制器的公共屬性傳遞必要的var。 例如:
#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是源控制器中的屬性(可以在私有范圍內)
如果您需要從任何地方訪問它,則可以將變量存儲在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]);
}
在ViewController之間傳遞數據的最簡單方法是使用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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.