1

UISearchBar を TableViewController に追加する方法を知りたいのですが、テーブル ビュー ヘッダーには追加しません。

特定のシナリオでスクロールした後に既存の検索バーが消えるという問題があります。検索バーを「フロート」にする方法を見つけましたが、いくつかのまれなケースでは、スクロール後に検索バーが消えます。

この問題をグーグルで調べたところ、この問題に対処するためにテーブル ビュー ヘッダーから検索バーを削除した人がいることがわかりました。テーブル ビューが UIViewController に追加されている場合、これは比較的簡単です。しかし、TableViewController によって自動的に提供されるテーブル ビューのサブビューではない新しいビュー (この場合は検索バー) を TableViewController に追加するにはどうすればよいでしょうか。

iPad アプリ iOS 6

-マイク C に感謝します。

4

2 に答える 2

1

まず、ストーリーボードを使用します。UIView オブジェクトをテーブル ヘッダーに追加します。次に、UISearchBar を UIView に配置します。また、テーブル ビュー コントローラーを検索バーのデリゲートにする必要があります。scrollViewDidScroll メソッド (または類似のメソッド) を使用する代わりに、フローティング コードを viewDidLayoutSubviews に配置します。これはすべての場合に機能します。また、カスタム セクション ヘッダーを使用し、テーブル ヘッダー ビューが常に最前面に表示されるようにする必要があるため、bringToFront も呼び出します。一番上の UIEdgeInset は、tableHeaderView の高さです。

viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    CGRect frame=self.tableView.tableHeaderView.frame;
    frame.origin.y=self.tableView.contentOffset.y;
    if (frame.origin.y <= 0) {
        frame.origin.y=0;
        [self.tableView setContentInset:UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)];
    } else {
        [self.tableView setContentInset:UIEdgeInsetsMake(48.0, 0.0, 0.0, 0.0)];
    }
    [self.tableView.tableHeaderView setFrame:frame];
    [self.tableView bringSubviewToFront:self.tableView.tableHeaderView];
}
于 2013-02-12T16:37:03.323 に答える
0

Stackoverflow からも Apple Developer のフォーラムからも誰も応答しなかったので、Cocoaheads の Idaho ブランチの Ron Adams に助けてもらいました。基本的に、私は UITableViewController を UIViewController に変更し、テーブルビューと検索バーを手動で追加することになりました。少し余分な作業ですが、うまくいきます!

于 2012-12-18T19:05:48.233 に答える