0

ナビゲーションバーの位置が UIScrollView の contentOffset にアタッチされているプッシュアップ UINavigationBar を実装しようとしています (ios7 でのサファリの動作と同様)。

動的な動きを機能させるために、プログラムで作成され、UIViewController のサブビューとして追加された UINavigationBar を使用していviewます (としてアクセスできますself.navbar)。

UIViewController は UINavigationController 階層内にあるため、ビルトインself.navigationController.navigationBarを の上部に隠してい-viewWillAppear:ます。

私が解決しようとしている問題は、この新しいスタンドアロンのナビゲーション バーに戻るボタンを追加することです。できれば、ナビゲーションコントローラーとその非表示の組み込みナビゲーションバーからボタンまたはナビゲーションアイテムを単純にコピーしたいのですが、これはうまくいかないようです

スタンドアロンの navbar の leftBarButtonItem を偽の戻るボタンに設定する唯一の解決策はありますか (navController の navbar に backItem がある場合)。これは少しハッキリしているように思えます。むしろ、組み込みの backButton 機能を使用したいと思います。

4

2 に答える 2

1

Vinzzz の回答は適切な解決策でした。コンテキストがわずかに異なるため、これが私の実装です。

UIViewController のviewDidLoadメソッドで、navbar のナビゲーション項目を次のように設定します。

NSMutableArray* navItems = [@[] mutableCopy];
if (self.navigationController.viewControllers.count > 1)
{
    NSInteger penultimateIndex = (NSInteger)self.navigationController.viewControllers.count - 2;
    UIViewController* prevVC =  (penultimateIndex >= 0) ? self.navigationController.viewControllers[penultimateIndex] : nil;

    UINavigationItem* prevNavItem = [[UINavigationItem alloc] init];
    prevNavItem.title = prevVC.title;

    [navItems addObject:prevNavItem];
}

UINavigationItem* currNavItem = [[UINavigationItem alloc] init];

... <Add any other left/right buttons to the currNavItem> ...

[navItems addObject:currNavItem];
[self.navbar setItems:navItems];

...self.navbarフローティング スタンドアロン UINavigationBar はどこにありますか。

self.navbarまた、現在のビュー コントローラーをのデリゲートに割り当て、-navigationBar:shouldPopItem:[戻る] ボタンが押されたときにトリガーされるイベントをリッスンします。

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
    if (navigationBar == self.navbar)
    {
        [self.navigationController popViewControllerAnimated:YES];
        return NO;
    }
    return YES;
}

(元に戻すYESと、ios7でスワイプジェスチャを使用するとクラッシュします)。

于 2013-10-10T13:16:25.273 に答える