1

状況:私は完全にUInavigationcontrollerに基づいたアプリケーションを持っています。アプリケーションのある時点で、コントローラーをプッシュします。コントローラーにはいくつかのサブビューが含まれています。次に、同じクラスのコントローラーAの他の新しいインスタンスであるコントローラーBをプッシュします。また、コントローラーBにはいくつかのサブビューがあります。

コントローラBをポップすると、コントローラAに関連付けられたビューが表示されます。問題は、画面上に(Aのサブビュー上に)コントローラーBに関連付けられたビューのすべてのものもあることです。

私の推測では、どういうわけか、問題は両方のコントローラーが同じクラスのインスタンスであるという事実に関連していると思います。(異なるクラスのコントローラーを使用すると、完全に機能します)

どうも。

編集:すべてのものはプログラムで、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];


      }];
    }

上記のコードは、新しいView Controllerをプッシュまたはポップすると実行され、サブビューを「フェードアウト」します。完了すると、ビューから削除されます。ビューが再度読み込まれるたびに、サブビューが再度追加されるようにする必要があります。お役に立てれば。

于 2013-01-02T16:17:26.973 に答える