在没有 segue 的情况下在 2 个视图之间传递数据
Pass data between 2 views without segues
我有 2 个视图,一个登录视图和一个主视图。
我使用 SWRevealViewController,我想在应用程序启动时自动显示我的菜单。我知道如何显示我的菜单,但我不知道如何在启动时只显示一次。
我想在我的登录视图和我的主视图之间传递一个简单的字符串,但没有 segue,并做了一个简单的测试:
if (myPreviousView == "LoginView")
{
// display my menu
}
您可以修改第二个视图控制器的 init 方法,以便在子class 时采用自定义属性。因此,假设您创建了一个标准的 UIViewController(.h 和 .m 文件)。您可以在 .h 文件中根据自己的喜好修改此新 class 的 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];
这当然是一种编程方法,但它应该很容易应用于界面生成器(不幸的是,因为我从未使用过界面生成器,所以我不知道具体如何,但正如我所说,它应该相当简单给任何使用它的人)。
另一种方法是使用 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]);
我有 2 个视图,一个登录视图和一个主视图。
我使用 SWRevealViewController,我想在应用程序启动时自动显示我的菜单。我知道如何显示我的菜单,但我不知道如何在启动时只显示一次。
我想在我的登录视图和我的主视图之间传递一个简单的字符串,但没有 segue,并做了一个简单的测试:
if (myPreviousView == "LoginView")
{
// display my menu
}
您可以修改第二个视图控制器的 init 方法,以便在子class 时采用自定义属性。因此,假设您创建了一个标准的 UIViewController(.h 和 .m 文件)。您可以在 .h 文件中根据自己的喜好修改此新 class 的 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];
这当然是一种编程方法,但它应该很容易应用于界面生成器(不幸的是,因为我从未使用过界面生成器,所以我不知道具体如何,但正如我所说,它应该相当简单给任何使用它的人)。
另一种方法是使用 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]);