情况: 我有一个完全基于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
。
答案 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文件的“新实例”吗?