0

私は辞書アプリを作成しています。基本的にタブバーアプリケーションです。辞書検索にはタブが1つ、文法ページなどには他のタブが使用されています。検索バーで表のセルからモーダルビューを作成するときにナビゲーションバーに戻るボタンを作成できません

辞書ルックアップタブの上部にはUITableViewがあり、下にUITableViewがあります。ユーザーは検索語を入力します。

ユーザーが結果内の行をクリックすると、辞書全体の詳細を表示する詳細表示が開きます。私が理解しているのは、これがトップに戻るボタンを持っていれば検索に戻ることが最善であるということです。

私はこのために新しいビューコントローラを作成しました。そして、ナビゲーションバーとテキストビューをnibファイルに入れました。しかし、Interface Builderに「戻る」ボタンを表示させることはできません。後で自動的には発生しません。

は、私は次のコードを使用して、新しいビューが表示されるようにするには:美しくで

- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    dictEntryViewController *entryView = [[dictEntryViewController alloc] 
     initWithNibName:@"dictEntryViewController" bundle:nil]; 

    [self presentModalViewController:entryView animated:YES]; 
} 

この新しいビューのスライドを、しかし、ナビゲーションバーには、[戻る]ボタンを持っていません。一時的な解決策として、私は基本的にこれを行い、新たな観点で、通常のボタン作成しました:

[self dismissModalViewControllerAnimated:YES]; 

を...、これはうまく動作しますが、私はそれがために、ナビゲーションバーを使用するために、より自然な感じだと思いますナビゲーション。

私の問題は、両方のビューがナビゲーションコントローラを共有している既存のビューに新しいビューをプッシュするときだけ戻るボタンが表示されるということです。しかし、画面のその部分がすでに検索バーによって占有されているため、検索バーにナビゲーションバーを追加することはできません。

おそらく、これにはモーダルビューコントローラを使用しないでください。うまくいくように見えますが、いくつかの選択肢(たとえば、pushViewController)を試しても、戻るボタンが表示されませんでした。

この件についてお手数ですが、私は今、長い間解決策を探してきましたが、ほとんどのソリューションは、この場合は実行できないナビゲーションバーをテーブルビューの上に追加するように見えます。

+0

いずれかの回答があなたの問題を解決しましたか? –

答えて

0

戻るボタンを取得するには、UINavigationControllerを使用するか、独自のボタングラフィックを作成する必要があります。しかし、私はあなたに​​のUISearchDisplayControllerを提案し、これをUINavigationControllerと組み合わせて使用​​します。

UISearchDisplayControllerとすると、検索バーをタップすると、ナビゲーションバーの上部に移動します。次に、行を選択し、詳細ビューコントローラをnavスタックにプッシュすると、ビューコントローラは戻るボタンでスライドインされます。

UISearchDisplayControllerを稼働させる作業は少しありますが、最終的な結果は(IMO)に相当します。

これをIBで設定できるはずです。あなたのメインNIBをUINavigationControllerにドラッグし、ルートビューコントローラをリストビューコントローラに設定します。リストビューコントローラー(おそらくサブクラスUITableViewController)のNIBで、検索バーと検索表示コントローラーをテーブルビューの上にドラッグして、すべて上に引っ掛けます。あなたは結果セットをフィルタリングするためのコードを書く必要がありますが、私はあなたがすでにそれを行ったと推測しています。

+0

ありがとうございます。私はあなたのリンクに従っていましたが、UISearchDisplayControllerとUINavigationControllerをどのように組み合わせるかははっきりしていません。私はInterface BuilderでUINavigationControllerのみを作成し、プログラムでUISearchDisplayControllerを作成しますか? –

+0

私の答えが更新されました。 –

0

アプリケーション内にナビゲーションコントローラを既に実装している場合は、次の画面に移動することができる& ....非常にトリッキーです。

はあなたによろしいです、あなたがいない場合は、その後、ナビゲーションバーのタイトルを設定している:今

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    self.title [email protected]"App Name"; 
} 

トリッキーな部分は、ちょうどあなたがバックを取得しますここ &をバックアップするナビゲーションバーのタイトルを設定します次のビューのボタン。

- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 

    dictEntryViewController *entryView = [[dictEntryViewController alloc] 
     initWithNibName:@"dictEntryViewController" bundle:nil]; 

    self.title [email protected]"Back"; 

    [self.navigationController pushViewController:entryView animated:YES]; 
    [entryView release]; 
} 

両ナビゲーションコントローラ& PresentModalViewコントローラは異なる方法で動作しますが、あなたの思考は、それがナビゲーションだtrack.If、あなただけのように、PresentModalViewことは最初から開始し、一方、アプリケーション内でのナビゲーションを維持スタック&を使用することができます右側にあります新しいビュー&では、同じ内でNavigationControllerを実装できます。

関連する問題