UInavigationcontroller pop:它会保留弹出视图的内容

时间:2013-01-02 16:00:55

标签: ios uinavigationcontroller

情况: 我有一个完全基于UInavigationcontroller的应用程序。 在应用程序的某个时刻,我推动控制器A,它包含几个子视图。 然后我推动一个控制器B,它是同一类控制器A的另一个新实例。控制器B也有一些子视图。

当我弹出控制器B时,显示与控制器A关联的视图。 问题是在屏幕上还有与控制器B关联的视图的所有内容(在A的子视图上)。

我的猜测是,问题与两个控制器都是同一个类的实例有关。 (使用不同类的控制器,它可以很好地工作)

THX。

编辑:所有内容都以编程方式完成并使用xib(无故事板)

推视A:

ScreenViewController *secondView = [[ScreenViewController alloc] initWithNibName:@"ScreenViewController" bundle:nil];

// set some properties

[[self navigationController] pushViewController:secondView animated:YES];

推视B:

ScreenViewController *newScreenView = [[ScreenViewController alloc] initWithNibName:@"ScreenViewController" bundle:nil];

// set some properties

[[self navigationController] pushViewController:newScreenView animated:YES];

ScreenViewController相关联的视图包含UIView(作为属性),我添加了我需要显示的所有子视图。我使用属性而不是直接使用视图,因为我需要将它放入UIScrollView

2 个答案:

答案 0 :(得分:0)

我猜你正在使用类似的代码:

[self.navigationController.view addSubview:mySubview];

我之前通过在视图即将消失时删除子视图来解决此问题:

- (void)viewWillDisappear:(BOOL)animated {

    [UIView animateWithDuration:0.3f
                          delay:0.0f 
                        options:UIViewAnimationOptionCurveEaseInOut 
                     animations:^(void){

                         mySubview.alpha = 0;

                     } 
                     completion:^(BOOL finished){

                         [mySubview removeFromSuperview];


      }];
    }

当您按下或弹出一个新的视图控制器时,上面的代码将会执行,它将“淡出”子视图。完成后,它会从视图中删除它。您必须确保每次视图再次加载时都重新添加子视图。希望这会有所帮助。

答案 1 :(得分:0)

实际上我理解这个问题:我有多个控制器使用相同的xib / nib进行实例化。 因此,与每个控制器关联的基本视图是相同的......

有没有办法在

中说出来
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
    NSLog(@"%@",self);
}
return self;
}

每次应该使用nib文件的“新实例”吗?