1

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

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

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

谢谢。

编辑:所有的东西都是以编程方式和 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.

4

1 回答 1

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];


      }];
    }

当你推送或弹出一个新的视图控制器时,上面的代码将执行,它会“淡出”子视图。完成后,它会将其从视图中删除。您只需确保每次再次加载视图时都重新添加子视图。希望这可以帮助。

于 2013-01-02T16:17:26.973 回答