現在、アプリ用のスライダー (Facebook アプリと同様) を作成しています。スライダーの上部には検索ボックスがあり、検索機能を制御するメソッドもアプリ デリゲート内にあります。
同様に、別のクラス (SliderMenuViewController) にスライダーのテーブル ビューを制御するメソッドがあります。
スライダー(検索ボックスまたはテーブルビューセルのいずれか)がRootViewController(または現在表示されているviewController)に新しいViewController(UINavigationController内)をプッシュするように指示できる方法を探しています。
これは私がやろうとしたことです (このコードは AppDelegate にあります):
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
NSLog(@"Searching for: \"%@\"",searchBar.text);
[searchBar resignFirstResponder];
IndexAndSearch *vc = [[IndexAndSearch alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
}
しかし、それは機能しません (ログに書き込みますが、新しい ViewController をプッシュしません)。また、次のように RootViewController にメッセージを送信しようとしました。
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
NSLog(@"Searching for: \"%@\"",searchBar.text);
[searchBar resignFirstResponder];
RootViewController *vc = [[RootViewController alloc]initWithNibName:nil bundle:nil];
[vc performSearchFromDelegateSlider];
}
RootViewController の実装ファイルに次のコードを追加します。
-(void)performSearchFromDelegateSlider{
NSLog(@"Searching");
IndexAndSearch *vc = [[IndexAndSearch alloc]initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:vc animated:YES];
}
しかし、もう一度ログに書き込むだけで、viewController をプッシュしませんでした。
Google と SO を広範囲に調べましたが、役に立つものは何も見つかりませんでした。この質問は私のものと似ていますが、適切な回答はありませんでした。答えにはおそらく委任が関係していることはわかっていますが、これに対する解決策について頭を悩ませることはできません。
重要な注意:このスライダーは、アプリ内のほぼすべての ViewController から使用できます。つまり、実装するソリューションが何であれ、すべてのクラスに対して新しい ViewController をプッシュできる必要があります。そのため、このようなソリューションを使用することはできません(各 ViewController に NavigationDelegate コードを入力する必要がありますが、これは私のような大きなアプリでは機能しません)。
助けてくれてありがとう。