web-dev-qa-db-ja.com

iOSのナビゲーションバーのタイトルにドロップダウンメニューを追加する方法

これらのスクリーンショットのドロップダウンメニューに似たものを作りたいと思います。どうすればそれを行うことができますか?

enter image description here

タイトルをタップすると、矢印が上を向き、メニューが下に下がります。アプリは大学のメニューです。

enter image description here

11
TheBrownCoder

アプリでこの機能を実行するためのcocoacontrolsはたくさんあります。

iOSのドロップダウンメニューコントロール

しかし、私は lmdropdownview が最も正確だと思います。

私の間違い、 btnavigationdropdownmen それはあなたが求めているものに対して最も正確です(あなたの画面によると)。

実装(Swift)[より具体的な手順とカスタマイズについては、Readmeを参照してください]:

let items = ["Most Popular", "Latest", "Trending", "Nearest", "Top Picks"]

let menuView = BTNavigationDropdownMenu(frame:  CGRectMake(0.0, 0.0, 300, 44), title: items.first!, items: items, containerView: self.view)

self.navigationItem.titleView = menuView

menuView.didSelectItemAtIndexHandler = {(indexPath: Int) -> () in
            println("Did select item at index: \(indexPath)")
            self.selectedCellLabel.text = items[indexPath]
}

それが役に立てば幸い。

編集:

情報を提供してくれた「rsc」に感謝します。このcocoacontrolの objective-cバージョン があります。

    #import "PFNavigationDropdownMenu.h"


-(void)viewDidLoad{
    PFNavigationDropdownMenu *menuView = [[PFNavigationDropdownMenu alloc]initWithFrame:CGRectMake(0, 0, 300, 44)title:items.firstObjects items:items containerView:self.view];

    menuView.didSelectItemAtIndexHandler = ^(NSUInteger indexPath){
            NSLog(@"Did select item at index: %ld", indexPath);
            self.selectedCellLabel.text = items[indexPath];
        };

        self.navigationItem.titleView = menuView;

    }
16
Karlo A. López

手動で行う場合の考えられる回避策:

2つのUIButton(上/下)を作成し、最初の1つをnavigationItem.titleViewに割り当て、このアクションでUIControlEventTouchUpInsideのアクションを追加し、状態が拡張または折りたたみに変更され、その追加/削除UITableViewに依存して空のdataSourceが上にあるかどうかを確認しますUIViewControllerview、適切なフレームを設定します。次に、データソースを更新し、行アニメーションUITableViewRowAnimationBottomまたはUITableViewRowAnimationTopでリロードします。これは、データソースが展開されているか折りたたまれているかに応じて異なります。ボタンを2番目のものと交換します。

6
teamnorge