在没有segue的2个视图之间传递数据

时间:2015-08-22 19:54:47

标签: ios swift uiview swrevealviewcontroller

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

我使用SWRevealViewController,我希望在应用启动时自动显示我的菜单。我知道如何显示我的菜单,但我不知道如何在启动时只显示一次。

我想在我的Login视图和主视图之间传递一个简单的String但没有segue,并进行了一个简单的测试:

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

2 个答案:

答案 0 :(得分:1)

另一种方法是使用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]);

答案 1 :(得分:0)

您可以修改第二个视图控制器的init方法,以便在子类化时获取自定义属性。所以,假设你创建了一个标准的UIViewController(.h和.m文件)。您可以在.h文件中修改此新类的init方法:

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

然后用.m中的新标准替换标准init:

- (instancetype)initWithString:(NSString *)string {
}

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

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

这当然是一种程序化方法,但它应该很容易应用于界面构建器(不幸的是,因为我从不使用界面构建器,我不知道具体如何,但正如我所说,它应该相当简单任何使用它的人。)