簡體   English   中英

在ViewController之間共享變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM