7

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

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

前もって感謝します。

4

7 に答える 7

5

私は同じ問題を抱えていて、たまたまこの解決策に出くわしました...

Interface Builder を使用して、テーブル ビュー コントローラー (例: UISearchDisplayController) をタブ バーまたはナビゲーション コントローラーにネストしている場合は、[属性インスペクター] ウィンドウで [Nib Name] を設定する必要があります。

Nib 名は、テーブル ビューを保持し、コントローラー (例: UISearchDisplayController) をファイルの所有者として持つ名前になります。

于 2010-01-22T20:47:32.727 に答える
1

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

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

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

于 2011-05-03T01:25:37.887 に答える
1

[[MyViewController alloc] initWithNibName:nil bundle:nil];最近、NIB ファイルがクラスと同じ名前 (つまり ) の場合にNIB ファイルをロードできることを知りましたMyViewController.xib。このように初期化すると、「UISearchBar UISearchBarDisplayController」が表示されないことが判明しましたand。クラスの名前を実際に入力して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 を使用しています。

于 2012-05-09T16:32:46.993 に答える
1

同様の問題がありました

解決するには、私のメインのペン先で、許されていない答えに1つの追加ステップを実行する必要がありました

1) UITabController を作成します 2) 次に、UINavigational Controller をタブコントローラーにドラッグアウトしました 3) 次に、UITableViewController を子として NavigationalController にドラッグアウトしました 4) 次に、(3) クラスをインスペクターで MyTableWithSearchBarViewController に変更しました - nib 名は正しく、必要に応じてインスペクターでも変更します。そうして初めて、検索バーが正しく表示されます...

手順 3 で別のコントローラーをステージにドラッグした場合、または tableView をそこに残した場合、検索バーではなくテーブルのみが表示されます。

于 2010-01-17T02:57:57.880 に答える
0

私のために働く別の可能な修正は、initWithNibName:bundleでUITableViewControllerを初期化することです:

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

UITabBarControllerに配置する前にUITableViewControllerをUINavigationControllerにネストしても、問題は解決しません...

于 2011-12-27T03:51:04.647 に答える