我花了最近几天试图解决有关uiviews更新的奇怪问题
我有一个UIViewController(让我们称之为mm3ViewController)有2个视图(viewtop和viewbottom)。 (autolayout为ON,屏幕一半的每个视图都有。)
mm3ViewController是2个childviewcontrollers的parentviewcontroller,名为resultTopVC和resultBottomVC。
这两个childviewcontrollers是Resultviewcontroller的实例,子视图显示在viewtop和viewbottom中,使用mm3ViewController的prepareview方法:
//piece or mm3ViewController code
- (void)prepareviews{
resultTopVC = [[resultsviewcontroller alloc] initWithNibName:@"resultsviewcontroller" bundle:nil];
resultTopVC.view.frame = _viewtop.bounds;
resultTopVC.selectedview = SelectedviewisTop;
[resultTopVC.view setBackgroundColor:[UIColor orangeColor]];
[self.viewtop addSubview:resultTopVC.view];
[self addChildViewController:resultTopVC];
[resultTopVC didMoveToParentViewController:self];
resultBottomVC = [[resultsviewcontroller alloc] initWithNibName:@"resultsviewcontroller" bundle:nil];
resultBottomVC.view.frame = _viewbottom.bounds;
resultBottomVC.selectedview = SelectedviewisBotton;
[resultBottomVC.view setBackgroundColor:[UIColor grayColor]];
[self.viewbottom addSubview:resultBottomVC.view];
[self addChildViewController:resultBottomVC];
[resultBottomVC didMoveToParentViewController:self];
}
这部分代码似乎工作正常。
Resultviewcontroller是一个包含3个UILabel的UIViewController(Autolayout为ON)。
我添加了一个toucheBegan方法来检测Resultviewcontroller intances视图和子视图的任何部分中的触摸。触摸触发一个名为buttontouched的方法......
//piece or Resultviewcontroller code
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
[self buttontouched:nil];
}
- (IBAction)buttontouched:(id)sender {
ivc= [[inputViewController alloc]initWithNibName:@"inputViewController" bundle:nil];
ivc.selectedview = _selectedview;
[self presentViewController:ivc animated:YES completion:nil];
}
此方法会显示并显示允许用户输入某些数据的UIViewController(inputViewController)。
在数据输入之后,当用户完成时... inputViewController实例发布一个通知(其中一些数据包含在userinfodic中),Resultviewcontroller实例(resultTopVC和resultBottomVC)使用它来更新他们的视图backgroundcolor,labels等...删除inputViewController实例
//piece of Resultviewcontroller code
#pragma mark
#pragma mark Notification managment methods
- (void) NotifEvalution:(NSNotification*)notice{
if ([notice.name isEqualToString:kNotificationinputcancelled]) {
NSLog(@"cancel");
[self dismissViewControllerAnimated:TRUE completion:nil];
}
if ([notice.name isEqualToString:kNotificationinputreturnobject]) {
[self dismissViewControllerAnimated:TRUE completion:nil];
NSDictionary *dic = notice.userInfo;
Selectedview caller = (Selectedview)[[dic objectForKey:@"caller"]integerValue];
if (_selectedview == caller){
NSLog(@"I receivers %@",[dic objectForKey:@"value"]);
[self.view setBackgroundColor:[UIColor yellowColor]];
}else{
[self.view setBackgroundColor:[UIColor magentaColor]];
}
}
}
调用NotifEvalution方法(NSLog测试工作正常,inputVC被解除)...但视图和标签不是更新,我无法弄清楚原因!
我尝试了不同的方法和测试,但我现在已经没有选择了......
在Resultviewcontroller视图层次结构之上的透明UIButton ...而不是toucheBegan方法不能解决问题
我已经测试了Notification或Delegate设计模式......
我注意到一件事:我可以使用Resultviewcontroller ViewWillAppear方法更新视图和标签(出口已正确设置)...但是在输入VCC并被解除后我无法更新任何内容......
我的问题似乎涉及modalviewcontroller ......
您对这个问题有什么线索以及解决问题的方法吗?
Thx