在2个视图之间传递数据,不需要segue



我有2个视图,登录视图和主视图。

我使用SWRevealViewController,我想在应用程序启动时自动显示我的菜单。我知道如何显示我的菜单,但我不知道如何在启动时显示它。

我想在我的登录视图和我的主视图之间传递一个简单的字符串,但没有segue,并做了一个简单的测试:

 if (myPreviousView == "LoginView")
 {
      // display my menu
 }

另一种方法是使用NSUserDefault来存储字符串,它可以从应用程序中的任何地方访问。

你把字符串放到第一个视图的NSUserDefaults中

// Initialize the NSUserDefaults object and an array for data storage
NSUserDefaults *defsData = [NSUserDefaults standardUserDefaults];
NSMutableArray *myArray = [[NSMutableArray alloc] init];
// Add your string to the custom array
NSString *myString = @"My string.";
[myArray addObject:myString];
// Put the array back into UserDefaults for later use
[defsData setObject:myArray forKey:@"Key"]; // Key can be anything
[defsData synchronize];
现在,数组(以及其中的字符串)可以在任何地方使用。因此,当你导航到第二个视图控制器时,只需初始化一个NSUserDefaults并访问字符串:
NSUserDefaults* defsData = [NSUserDefaults standardUserDefaults];
NSArray *myArray = [defsData objectForKey:@"Key"];
NSLog("This is my stored string: %@", [myArray objectAtIndex:0]);

你可以修改第二个视图控制器的init方法,使其在子类化时采用自定义属性。假设你创建了一个标准的UIViewController(。h和。m文件)。您可以根据自己的喜好在.h文件中修改这个新类的init方法:

- (instancetype)initWithString:(NSString *)string;

然后将标准init替换为.m:

中的新init。
- (instancetype)initWithString:(NSString *)string {
}

当你调用你的视图控制器时,你只需要使用这个新的init方法并像这样传递你想要的字符串

UIViewController *viewController    = [[UIViewController alloc] initWithString:myString];
[self presentViewController:viewController animated:NO completion:nil];

这当然是一种编程方法,但它应该很容易应用于接口构建器(不幸的是,因为我从来没有使用过接口构建器,我不知道确切的方法,但正如我所说的,它应该对任何使用它的人都相当直接)。

相关内容

最新更新