UIViewController视图和子视图不会更新

时间:2014-11-10 13:59:20

标签: ios objective-c uiview uiviewcontroller modalviewcontroller

我花了最近几天试图解决有关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

0 个答案:

没有答案