Ios 如何初始化另一个视图控制器的值
在我的应用程序中,当用户从浏览器重定向到应用程序时,我将显示注册页面。我想从url变量中插入值。所以首先我从url中获取值,然后用文本框值显示该页面,但它并没有设置文本框值 我的代码:Ios 如何初始化另一个视图控制器的值,ios,iphone,ios7,Ios,Iphone,Ios7,在我的应用程序中,当用户从浏览器重定向到应用程序时,我将显示注册页面。我想从url变量中插入值。所以首先我从url中获取值,然后用文本框值显示该页面,但它并没有设置文本框值 我的代码: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSS
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
NSString *urlString=[NSString stringWithContentsOfURL:url encoding:nil error:nil];
NSRange r = [urlString rangeOfString:@"gratzeez://" options:NSCaseInsensitiveSearch];
if(r.location != NSNotFound){
NSLog(@"founddddd");
NSLog(@"gratzeez url %@",url);
//NSString *str=[url valueForKey:@"email"];
NSArray *query = [[url query] componentsSeparatedByString:@"&"];
NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithCapacity:[query count]];
for(NSString *parameter in query)
{
NSArray *kv = [parameter componentsSeparatedByString:@"="];
[parameters setObject:[kv count] > 1 ? [[kv objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding] : [NSNull null]
forKey:[[kv objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]];
}
NSLog(@"Parameters: %@", parameters);
[self.tabBar dismissViewControllerAnimated:NO completion:nil];
RegistrationViewController *RegistrationVC=[[RegistrationViewController alloc] initWithNibName:@"RegistrationViewController" bundle:nil];
RegistrationVC.txtEmail.userInteractionEnabled=NO;
NSLog(@"q = %@", [parameters objectForKey:@"email"]);
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:RegistrationVC];
RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
NSLog(@"value%@",RegistrationVC.txtEmail.text); //here getting null value
[self.tabBar presentViewController:navController animated:NO completion:nil];
navController.navigationItem.leftBarButtonItem=nil;
return YES;
}
我用这种方式显示注册视图控制器是什么
RegistrationViewController *RegistrationVC=[[RegistrationViewController alloc] init ];
NSLog(@"q = %@", [parameters objectForKey:@"email"]);
UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:RegistrationVC];
NSLog(@"txtemail %@ value%@",RegistrationVC.txtEmail,RegistrationVC.txtEmail.text);
[self.tabBar presentViewController:navController animated:NO completion:^{
RegistrationVC.txtEmail.userInteractionEnabled=NO;
RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
}];
现在,这两个值都为null。正如我们在注释中看到的,当您尝试为txtEmail赋值时,它不会被创建 我建议您在方法
presentViewController:animated:completion:
中添加一个完成块。此时,将加载控制器RegistrationVC
,并创建其视图(和子视图),因此您可以为元素指定值:
[self.tabBar presentViewController:navController animated:NO completion:^{
RegistrationVC.txtEmail.text=[parameters objectForKey:@"email"];
}];
替换
NSLog(@“value%@”,RegistrationVC.txtEmail.text)代码>带有NSLog(@“textmail:%@\nvalue%@”、RegistrationVC.txtEmail、RegistrationVC.txtEmail.text)
检查您的textEmail此时是否存在。我看到您使用initWithNibName:bundle,在这种情况下,您的txtEmail必须放在您的Nib文件中,并附加IBOutlet。我希望你的[电子邮件]!=nil@zbMaxtxtEmail当时不存在。现在该怎么办?@zbMax这可能是因为在注册中导入appdelegate,并注册到appdelegate viewcontroller??很好…工作了…我以前做过这件事,当时它工作得很好…但不知道我已经对此进行了更改,它不工作了…无论如何,谢谢你…如果您只需使用[[RegistrationViewController alloc]init]
实例化您的RegistrationViewController
,即可创建一个具有空视图的控制器。不会创建界面生成器上的每个元素。并且所有IBOutlet都将为空。您可以将[[Myclass alloc]initWithNibName:@“myNib”]
作为Xcode查看。为我创建一个“Myclass”类型的对象,其视图将是名为“myNib”的xib
,并将属性与您链接到的接口上的元素相关联。在完成块中记录TXTMail,而不是在presentViewController:animated:completion:
是的,我已经设置了…我在日志中变为空..而且当我使用navigationcontroller演示时,注册视图页面也没有设置任何内容。如果您的文本电子邮件位于界面生成器上,链接到.h,并且如果您使用创建RegistrationVC
[[RegistrationViewController alloc]initWithNibName:@“RegistrationViewController”bundle:nil]
,文本电子邮件在显示视图控制器后不应为空…强制加载视图可能会奏效…尝试在RegistrationViewController*RegistrationVC之后添加[RegistrationVC view]
=[[RegistrationViewController alloc]initWithNibName:@“RegistrationViewController”捆绑包:nil];