2009-08-10 14 views
7

私はSDK 3.0を使用していくつかのコントローラを管理するUITabBarコントローラを持っています。これらの1つはtableViewコントローラであり、UISearchDisplayControllerを使用して検索機能を提供する必要があります。私のコードはすべて、Apple TableSearchの例に基づいています。ただし、タブをクリックすると、tableViewコントローラに関連するコンテンツが表示されますが、searchBarは表示されません。 IBのxibをチェックして、すべてのアウトレットが正しく設定されていることを確認しましたが、self.searchDisplayControllerは何も試しても常に検索バーが表示されません。UITabBarコントローラ内のコントローラからUISearchDisplayControllerを使用するには?

実際には、私はTableViewの例からMainView.xibを複製し、そのファイルの所有者クラスをタブの正しいコントローラクラスに設定しました。アウトレットは、例のMainView.xibのようなセットです。何か重要なステップがない、または間違っているのですか?

ありがとうございます。

答えて

1

私はそれを解決する方法を見つけました。私の場合、この問題は、UITabBarControllerに埋め込まれたコントローラを管理されたタブの1つ(つまり、子として)として使用していたためです。

コントローラをUITabBarControllerから削除し、代わりにUINavigationControllerをUITabBarControllerに追加し、最後にコントローラをUINavigationControllerの子として配置することで、完全に問題が解決されました。

私はこれがなぜそうであるのか分かりません(ドキュメントに関連情報はありません)。しかし、それは今や魅力のように働く。種類:

+0

これは2017年11月現在でも動作します.UINavigationControllerをタブページ[here](https://stackoverflow.com/a/37357242/1359088)に追加する方法を示す良い図があります。 –

1

私もこの問題を持っている:(テーブルビューの後ろに隠れてばかり検索バーですか?

@unforgiven、 あなたはこれを試してたの...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar]; 

これは、手動検索バーを作成し、私の接続が完璧であってもSearchBarが表示されないIBで何か愚かな間違いをしています:-(

答えを得たらこの投稿を更新してください...

1

私はunforgivensに一つの追加のステップをしなければならなかった解決するために、同様の問題

が私のメインnib

1では に答えていたが)UITabController 2を作成する)それから私はUINavigationalコントローラにし引きずり出さタブコントローラ 3)UITableViewControllerを子としてNavigationalControllerにドラッグしました 4)次にinspectorのMyTableWithSearchBarViewControllerにクラスを変更しました。 - nib名が正しいかどうかチェックし、必要に応じてインスペクタでこれを次のように変更します。よく 5)私はステップ(3)でIBによって自動的に作成されたtableViewを削除しなければならなかった。だけにして、正しく検索バーショー...

ステップ3で、私は、ステージ上に別のコントローラをドラッグするか、しかテーブルではなく、検索バー

奇妙なを表示していましたがのtableViewを残している場合だろう

5

私は同じ問題を抱えていましたが、この解決策につまずいてしまいました...

あなたのテーブルビューコントローラ(例えば。UISearchDisplayController)にInterface Builderを使用してタブバーやナビゲーションコントローラにネストされている場合は、あなたが窓「インスペクタを属性」で「ペン先名」を設定する必要があります。

Nibの名前は、テーブルビューを保持し、コントローラ(たとえば、UISearchDisplayController)をファイルの所有者とします。

1

あなたのnibファイルにUITableViewControllerが含まれている場合、Tomtrapezeは正解です。しかし、コードでUITableViewControllerをロードする場合(UINavigationControllerのスタックにプッシュするなど)、ソリューションは少し異なります。

UITableViewControllerまたはサブクラスを初期化するときは、initializerの-initWithNibName:bundle:フォームを使用して、nibファイルの名前を指定する必要があります。代わりに、標準の-initWithStyle:イニシャライザを使用して、ビューがロードされる前に手動でnibNameプロパティを設定することもできます。

ビューがロードされたときにnibNameプロパティが設定されていない場合、UITableViewControllerは通常のUIViewController nibルックアップロジックを使用しません。代わりに標準のUITableViewをロードするだけです。

0

私の作品別の可能性のある問題を修正する修正プログラムをinitWithNibNameとのUITableViewControllerを初期化することです:バンドル:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil]; 

ネストするには、UINavigationControllerでのUITableViewController前UITabBarControllerに入れては私のために問題を解決しません。 ..

1

NIBファイルがクラスと同じ名前(つまり、MyViewController.xib)である場合、[[MyViewController alloc] initWithNibName:nil bundle:nil];でNIBファイルを読み込むことができたことを最近知りました。この方法を初期化すると 'UISearchBar and UISearchBarDisplayController`が表示されません。実際にクラスの名前を入力してView Controllerを初期化すると、検索バーが正しく表示されました。私は当初、View Controllerをどのように提示していたかとは関係があると思っていましたが、そうではないとうれしく思いました。

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil]; 

searchVC.modalPresentationStyle = UIModalPresentationFullScreen; 
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

[self presentViewController:searchVC animated:YES completion:^{ }]; 

これは、iOS SDK 5.1とXCode 4.3.1を使用しています。

+0

はい、SDK 5.1ではいまよりははるかに優れています。 –

関連する問題