2010-12-05 16 views
0

現在、ナビゲーションバーを正しく動作させるには、多くの問題が発生しています。以下は私の階層です。UIタブバーとナビゲーションバー詳細ビュー

TabBarController 
    -- NavigationController 
    -- View 
    -- Navigation Controller 
    -- View 
    -- Navigation Controller 
    -- View 

私はすべてのタブバービューに対して継承する抽象クラスを持っています。この抽象クラスは、NavigationBarデリゲートとして設定され、ナビゲーションバーiboutletを持ちます。

私のビューの1つでは、テーブルビューを設定しています。誰かがテーブルビューを選択すると、より詳細なビューに移動します。以下は、これを行うために使用しているコードです。私はxibをセットアップするときに、NavigationBarをビューにドラッグし、ナビゲーションバーのデリゲートとして "VisitedPlace"のViewControllerを設定しました。

// Called when a row in the table view has been selected. 
// This method will change the view to the current place detailed view 
- (void) tableView:(UITableView *) tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath { 

    NSLog(@"We are here, and proud of it I suppose~"); 
    PlaceViewController *placeView = [[PlaceViewController alloc] initWithNibName:@"PlaceView" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:placeView animated:YES]; 
    [placeView release]; 
    placeView = nil; 

}

Iが行を選択すると、ログメッセージが印刷された、何も発生していません。

私は今非常に迷っています。私はNavigationControllerについて読んでいましたが、どのように実装しなければならないのですか、まったく正直ではありません。

EDIT: NSLogのself.navigationControllerでは、NavigatonControllerをドラッグしてVisitedPlacesのファイルオーナーとしてデリゲートを設定していました。しかし、navコントローラはまだゼロです。

ご協力いただければ幸いです!

+1

self.navigationControllerは、それがnilでないゼロ – vikingosegundo

+0

であることを確認してください。 VisitedPLaces.xibにナビゲーションコントローラをドラッグしました。私は、タブバーが所定の位置にある間、ナビゲーションバーがプッシュしてポップするようにしたい。 –

+0

私は実際に私が間違っていたものを考え出し、私はあなたがそれをここに見つけることができますoriellyから本当に良いチュートリアルを見ます。http:?//www.youtube.com/watch V = LBnPfAtswgw&機能=はい、それが存在する –

答えて

1

階層は、ナビゲーションコントローラを示しているかどうか確認したが、その後は、インターフェイスビルダーであなたのビューにナビゲーションバーをドラッグして説明しました。私はあなたがそれらの2つのことを混乱させていると思います。既存のビューにナビゲーションバーを追加しますが、ナビゲーションバーはUIViewサブクラスに過ぎません。それをあなたのビューに追加しても、ナビゲーションコントローラ(UIViewControllerサブクラス)は作成されません。なぜなら、self.navigationControllerプロパティの値がnilになっていて、プッシュメッセージをそのプロパティに送信しても何も起こりません。

MVC(モデル、ビュー、コントローラ)のデザインパターンは、ビューとコントローラの区別がここで理解する必要があるため、まだ読んでいない場合は、読み上げておく必要があります。

UINavigationControllerは、多くのコンテンツを直接表示しません。彼らが行うのは、他のUIViewControllerのスタックを管理することだけです。 UINavigationBarは、UIViewControllerが直接表示する唯一のビューです。ビューコントローラをスタックにプッシュするようにナビゲーションコントローラに指示すると、ナビゲーションコントローラはナビゲーションバーを適切に変更し、新しいビューコントローラのビューを画面上にアニメーション表示します。 UINavigationBarは、ナビゲーションコントローラによって管理される単なるUIViewです。ビューコントローラスタックを管理するための機能は含まれていません(これはMVCアプローチの明白な前提ですので、上記の私の提案)。

インターフェイスビルダーまたはコードのいずれか(後者が好ましい)のいずれかで、UINavigationControllerを作成する必要があります。実際には、タブバーのタブごとに1つ作成する必要があります。 UITabBarControllerのviewControllersプロパティをこれらのナビゲーションコントローラの配列に設定します。

次に、それぞれのナビゲーションコントローラには、最初の項目として表示するビューコントローラが必要です。これを行うには、ナビゲーションコントローラのプロパティのrootViewControllerを、ナビゲーションコントローラのスタックの最上部に表示するビューコントローラに設定します。

これに続きますか?私はそれを説明する非常に良い仕事をしているように私は感じない。私はこれが役立つことを願っていますもしそうでなければ、そう言ってください。もっとうまくやろうとします。

編集

だけFYI、あなたはナビゲーションコントローラなしでUINavigationBarを使用する場合がありますがございます。それは、あなたがビューコントローラを追跡し、それらを画面上でアニメーション表示するための独自のシステムを実装している場合です。同じような名前のView Controllerと混同してはならない別のビューであるUITabBarについても同じです。

0

デバッグやご質問の上部にself visitedPlacedオブジェクトを指し示すか

+0

をplayer_embedded。 –

関連する問題