UITabBarコントローラ内のコントローラからUISearchDisplayControllerを使用する方法?
-
12-09-2019 - |
質問
私は(SDK 3.0を使用して)複数のコントローラを管理UITabBarコントローラを持っています。これらの一つは、のtableViewコントローラであると私はUISearchDisplayControllerを使用して検索機能を提供する必要があります。私のコードはすべて、アップルTableSearch例に基づいています。タブをクリックしたときただし、のtableViewコントローラは、それに関連するコンテンツを示す表示されますが、何の検索バーは表示されません。私は店のすべてが正しく設定されていることを確認するIBでXIBを確認しているが、私はself.searchDisplayControllerをしようとするものに関係なく、常にnilであると、検索バーが表示されません。
実際には、私はTableSearchの例からMainView.xibを複製しているとタブの正しいコントローラクラスへのファイルの所有者クラスを設定します。出口は、例MainView.xibのように設定されています。私は、任意の重要なステップが欠落したり、間違った何かをやっているか?
事前にありがとうございます。
解決 3
は[OK]を、私はそれを解決する方法を発見しました。私の場合、問題は、私は(すなわち、子のような)その管理タブの一つとしてUITabBarController内に埋め込まれたコントローラを使用していたという事実によるものであった。
の代わりにUITabBarControllerにUINavigationControllerを追加し、UINavigationControllerの子供が問題を完全に解決してます。
最後に、私のコントローラを入れ、その後、UITabBarControllerからコントローラを削除します これは、(文書には、関連する情報をできるだけ頻繁に起こる、ありません)ので、なぜ私は理解していません。しかし、それは今、魔法のように動作します。 種類に関しては。
他のヒント
私は同じ問題を持っていたし、このソリューションつまずくに起こった...
あなたはテーブルビューコントローラを持っている場合(例えば。UISearchDisplayController
)にInterface Builderを使用してタブバーやナビゲーションコントローラにネストされて、あなたは「属性インスペクター」ウィンドウの「ペン先名」を設定する必要があります。
ペン先名は、テーブルビューを保持し、ファイルの所有者としてのコントローラ(例えば。UISearchDisplayController
)が1になります。
私もこの問題を持っている:(検索バーは、テーブルビューの背後に隠されてきている?
@unforgiven、 あなたはこれを試してたの...?
searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)];
[self.tableView setTableHeaderView: searchBar];
これは、手動で検索バーを作成し、それが動作します。しかし、私は検索バーが私の接続が完璧であっても表示されないIBにおけるいくつかの愚かな間違いを犯しています。 : - (
あなたが答えを得る場合は、この記事を更新しています...
私が持っていた同様の問題
私はunforgivens答えに一つの追加のステップをしなければならなかった解決するため、 私のメインnibで
1)UITabControllerを作成 2)それから私はタブコントローラにUINavigationalコントローラーを引きずり出さ 3)その後、子としてNavigationalControllerへのUITableViewControllerを引きずり出さ 4)次に、インスペクタの私MyTableWithSearchBarViewControllerあること(3)クラスを変更 - ペン先名が正しいかどうかをチェックし、必要に応じて同様にインスペクタで変更 5)私はその後、自動的にステップ(3)でIBによって作成されたのtableViewを削除する必要がありました。だけにしてしまう、検索バーショー正しく...
場合は、ステップ3で私は、ステージ上に別のコントローラをドラッグするか、しかテーブルを表示してしまうそこのtableViewを残していない検索バー
変な
Tomtrapezeは、あなたのnibファイルがのUITableViewControllerが含まれている場合は、正しい答えを持っています。あなたは、コード内のUITableViewControllerを読み込む場合でも、 - などUINavigationControllerのスタックにそれを押すと - 解決策は少し異なっています。
バンドル:初期化子の形とあなたのnibファイルの名前を指定するのUITableViewControllerまたはサブクラスを初期化するとき、、あなたは-initWithNibNameを使用する必要があります。別の方法として、あなたは標準-initWithStyle使用することができます。初期化子をして、手動ビューがロードされる前にnibNameプロパティを設定します。
ビューがロードされるときnibNameプロパティが設定されていない場合は、のUITableViewControllerは通常のUIViewControllerペン先の検索ロジックを使用しません。それだけではなく、標準のUITableViewをロードします。
私は最近、NIBファイルがクラス(すなわち[[MyViewController alloc] initWithNibName:nil bundle:nil];
)と同じ名前を持っているとき、私はMyViewController.xib
でNIBファイルを読み込むことができることを学びました。これは、この方法を初期化すると、表示しないように」UISearchBarand
UISearchBarDisplayController`の原因となることが判明しました。私は実際にクラスの名前を入力して、ビューコントローラを初期化すると、私の検索バーが正しく現れました。私は当初、それは私がビューコントローラを提示された方法とは何かを持っていたが、それはなかったことを喜んでいたと思っています。
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を使用しています。
私の作品別の可能な修正はinitWithNibNameでのUITableViewControllerを初期化することです:バンドルます:
SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];
を入れ子にするUINavigationControllerでのUITableViewControllerは前に私のために、問題が解決しないUITabBarControllerに入れて...