在两个ViewControllers之间传递数据

时间:2015-05-20 08:52:22

标签: ios objective-c

我需要在两个ViewControllers之间传递数据但没有UIButton,换句话说,我需要访问其他ViewController中的变量。 我的代码是:

LoginViewController *lvc;
NSString name=lvc.name;

3 个答案:

答案 0 :(得分:1)

这个具体案例可能比代表更容易。

从我看到的,你正试图传递登录凭据(名称/登录/密码/东西)。我会根据实际情况使用两件事。

NSUserDefaults-performSegueWithIdentifier:

NSUserDefaults是一个文件,只需使用以下命令即可在每个可以阅读和编辑的应用程序中加载:

设置变量:

NSString *aName;
[[NSUserDefaults standardUserDefaults]setObject:aName forKey:@"userName"];

获取变量:

NSString *aName = [[NSUserDefaults standardUserDefaults]objectForKey:@"userName"];

请注意,您可以保存以下对象NSDictionaryNSArrayNSStringNSNumberNSData,也许还有一些我忘记了但如果有人可以编辑。

请注意,此文件在每次启动时都会加载,因此您不希望将其用作数据库,而是将更多的小型存储用作易于使用的内容,例如用户名,首选项/设置以及类似内容。

另一种方法是在两个控制器之间使用performsegue,但这需要storyboards

在两个控制器之间拖动一个segue,命名它(例如)fromLoginToHome。我假设流程从登录控制器进入家庭控制器。

当您在两个视图之间移动时(例如,当用户按下“登录”时),请调用此方法

[self performSegueWithidentifier:@"fromLoginToHome" sender:self];

然后你需要实现这个方法,通常在那里但是在注释块中(当你创建你的Vc时它总是这样)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([segue.identifier isEqualToString:@"fromLoginToHome"]){

        HomeViewController *vc = (HomeViewController*)segue.destinationViewController;
        vc.myName = _myName;

      }
}

答案 1 :(得分:0)

Xcode using delegate to pass data between controllers这是为了让孩子与父母一起使用代理人

对于父母对孩子,你可以简单地使用segues。

HTH!享受编码。

答案 2 :(得分:0)

您可以在此处查看委托方法delegate。你能告诉我你是否在寻找代表

尝试使用如下 FirstViewController.h

@interface FirstViewController: UIViewController
- (void)GetItNow;

FirstViewController.m

- (void)GetItNow{
    NSLog(@"I acheived");    } 

  - (IBAction)goToSecondView:(id)sender {

    SecondViewController* Second= [[SecondViewControlleralloc] initWithNibName:@"SecondViewController" bundle:nil];
    rqVC.addId = self.addId;
    [self.view addSubview:Second.view];

}

SecondViewController.h

@property (nonatomic, assign) id delegate;

SecondViewController.m

- (IBAction)Action_LoadFunds:(id)sender {
    [self.view removeFromSuperview];
    [_delegate GetItNow];

}