0

すべてナビゲーションコントローラーで制御されるいくつかの画面でポップオーバーを作成しました。これが行われた例を見てきましたが、これらの例では、画面を切り替えると、タイトルとナビゲーション バーの「完了」ボタンが常に同じ位置にあり、アニメーション化されません。発生する唯一の変更は、表示される「戻る」ボタンです。

同じ動作を模倣しようとしましたが、正確ではありません。

画面が遷移するたびに、タイトルと完了ボタンが左にスワイプし、ビューの通常のアニメーションと同じようにフェードします。私はそれらを置いたままにし、ビューだけをアニメーション化する必要があります。また、自動生成される「戻る」ボタン (私は作成していませんが、ナビゲーション バーによって作成されています) には、前の画面のタイトルが付けられます。単純に「戻る」必要があります。自動生成されたボタンをカスタマイズするにはどうすればよいですか? または、少なくともその作成を停止して、自分でボタンを作成できるようにしますか?

いくつかのコード...

 //popover and navbar creation

SettingsPopoverView *settingsPopoverView = [[SettingsPopoverView alloc] initWithNibName:@"SettingsPopoverView" bundle:[NSBundle mainBundle]];
UINavigationController *nav = [[UINavigationController alloc]
                               initWithRootViewController:settingsPopoverView];


popover = [[UIPopoverController alloc] initWithContentViewController:nav];
popover.delegate = self;
popover.popoverContentSize = CGSizeMake(320, 497);
[popover presentPopoverFromRect:Button.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

その後、コードの後半で、ユーザーが最初のポップオーバー ウィンドウで選択を行うと、

//screen navigation call when selection is made
[self.navigationController pushViewController:selectionView animated:YES];

繰り返しますが、このコードのグループ化によりナビゲーション バーがアニメーション化され、次のビューで間違ったラベルの戻るボタンが自動生成されます。ナビゲーション バーだけのアニメーションを停止し、戻るボタンのラベルを変更する必要があります。

ありがとう

4

1 に答える 1

0

これはそれを行う1つの方法です。ストーリーボードで、ビューコントローラの上部にナビゲーションバーを追加し、その下にコンテナビューを追加して、画面の残りの部分を占めました。コンテナビューに付属のビューコントローラを削除し、ナビゲーションコントローラに置き換えました。インスペクターでナビゲーションコントローラーの[ナビゲーションバーを表示する]ボックスのチェックを外しました。セグエに接続されたボタンが並んでいる次のコントローラーにプッシュする他のコントローラーをいくつか追加し、それらのコントローラーにタイトルを付けました。コンテナビューを備えた最初のコントローラーで、次のコードを追加しました。

@implementation ViewController {
    IBOutlet UINavigationBar *bar;
    UINavigationController *nav;
    UIBarButtonItem *backButton;
    UIBarButtonItem *done;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    nav  = (UINavigationController *)self.childViewControllers[0];
    nav.delegate = self;
}

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:viewController.title];
    if (done == nil) done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClicked)];
    [item setRightBarButtonItem:done];

    if (navigationController.viewControllers.count >1) {
        if (backButton == nil)  backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backToPrevious)];
        [item setLeftBarButtonItem:backButton];
        [bar setItems:@[item] animated:NO];
    }else{
        [bar setItems:@[item] animated:NO];
    }
}

-(void)backToPrevious {
    [nav popViewControllerAnimated:YES];
}

-(void)doneClicked {
    NSLog(@"Done Clicked");
}
于 2013-01-28T18:54:00.290 に答える