从AppDelegate更改CustomViewController字段

时间:2016-02-02 10:56:59

标签: ios objective-c

我是ios(android dev)的新手

我正在处理从url打开我的应用程序,我在AppDelegate中使用当前方法获取了url。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    return YES;
}

我的链接中有某些参数,我想用它来填充textField的{​​{1}}。

我可以与LoginViewController的{​​{1}}进行沟通吗?考虑LoginViewController已经做过载。

3 个答案:

答案 0 :(得分:1)

您可以在appDelegate中定义一个属性,例如strName。

然后你必须从这个方法中分配它的值

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    //for example
    self.strName = [url query];

    return YES;
}

现在您可以从任何地方访问此属性。

appDelegate

中创建viewController的实例

#define AppDel ((AppDelegate *)[UIApplication sharedApplication].delegate)

然后分配如下

textfield.text = AppDel.strName;

答案 1 :(得分:0)

您可以通过多种方式与控制器通信:

  1. 将实例保留在appDelegate和调用方法中。
  2. 将数据保存在某种存储方式中(例如UserDefault),并以viewWillAppearviewDidAppear方法提取。
  3. 使用您自己的观察者模式实现或NotificationCenter

答案 2 :(得分:-1)

您可以在appDelegate中定义一个属性,例如strName。

然后你必须从这个方法中分配它的值

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    //for example
    self.strName = [url query];

    return YES;
}

现在您可以从任何地方访问此属性。

appDelegate

中创建viewController的实例

#define AppDel ((AppDelegate *)[UIApplication sharedApplication].delegate)

然后分配如下

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];  
    //for example
    textfield.text = AppDel.strName;
}
每次从任何控制器推送或弹出时,

viewWillAppear都会调用。