【问题标题】:Pass data between 2 views without segues在没有 segues 的 2 个视图之间传递数据
【发布时间】:2015-11-16 13:42:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果你不使用 segue,你如何改变视图(或视图控制器)?
  • 我使用 segue,但我不能用它传递数据,因为在我的 prepareForSegue() 中,如果我将我的 navigationController 转换为 MainView 类型,我会出错,因为我显示的是 MenuView类型。

标签: ios swift uiview swrevealviewcontroller


【解决方案1】:

您可以修改第二个视图控制器的 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];

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢你的方法:)
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多