0

私は最終的にタブ、テーブル、マップなどがたくさんあるアプリケーションを構築していますが、私は非常にシンプルなものを構築したいと思っています。iPhone UITableView、UINavigationView、Interface Builder

私はナビゲーションバーとテーブルビューを表示するシンプルなアプリケーションを構築するためにXCode 3.2.5とInterface Builderを使用しています。

私はテンプレートがあると知っていますが、後で(うまくいけば)タブバーコントローラにリンクできるように各ユニットを構築したいと思います。

インタフェースビルダーからビルドしたときに、ナビゲーションコントローラとテーブルビューを正しく連携させることはできません。

私はちょうどコードの上にIBでビルドする特定の理由があります - それはいくつかの練習ですので、私は他の人を助けることができます。コードは簡単に追うことができる方法で手渡されなければならないからです。

私はmainwindow [h/m/xib]とカテゴリ[h/m/xib]という2つのファイルセットを持っています。

mainwindows.mの主なコードは次のようになります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchoptions { 
    quickCats = [[categories alloc] initWithNibName:@"categories" bundle:nil]; 
    [window addSubView: quickCats.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

私はクラスのカテゴリ」への参照としてmainwindow.hファイルの「quickCats」を宣言しました。

[h/m/xib]はUIViewControllerのサブクラスで、UITableViewControllerのサブクラスで、セクション数、セル数、セルメソッドを適切に返すように変更しました。

インタフェース宣言は文字通りです:

@interface categories : UITableViewController { 
} 

私が最初にこのを起動すると、それは私が働くことを知っているテーブルをロードし、表示されます。

私が問題を抱えているのは、ナビゲーションコントローラを動作させることです。

私はオブジェクトパネルにUINavigationControllerをドロップし、その中にUITableViewControllerをドラッグすると、IB画面上にnavコントローラとテーブルが同時にあるように見えるようになります。

ここで、どのように配線しても、navコントローラがテーブルビューを起動することはできません。

ファイル所有者のビューをTableViewに接続する必要があります。または、私のアプリケーションが、私がUITableViewを返さなかったと言うキャッチされない例外でクラッシュすることがあります。

私は何が欠けていますか?

私は通常、コード例を読んで、initWithRootViewControllerを使ってナビゲーションコントローラを追加していることを知っていますが、これをIBとどのようにつなぎますか?

+0

私はこれを理解しているかもしれませんが、NavigationControllerをロードする別のクラスを持つコードのみの例を作成し、initWithRootViewControllerを呼び出すことができました:initWithNibNamed:bundleの後:TableViewControllerクラスで、後でIBに出て、私がそれを働かせることができるかどうかを見てください。 – JamesB

答えて

0

[OK]を、私はこれに決定的な答えを見つけることができない、IBはあなたがUINavigationControllerコントロールを配置することを可能にし、それの子としてUITableViewControllerを追加しますが、あなただけinitWithNibName:bundle:は、1つまたはを開始するために得ることができるようですもう片方。私は考えることができるすべてを試しましたが、NIBがロードされたときにもう一方が初期化されるようにワイヤリングをしません。

これを解決するには、UITableViewControllerをサブクラスUIViewControllerプロジェクトファイルを作成し、次にあなたがUIViewControllerのsublcassとしてMyTableWithNavigationというクラスを作成し、「初期化」と呼ばれる一つの方法を公開し、その中であなたがプログラム的initWithRootViewControllerを渡すUINavigationControllerを作成することです:結果のオブジェクトを呼び出したAppDelegateに返します。

これは同じ最終結果を達成しますが、今のところ必要なIB/XCodeのハイブリッドです。

基本的に私のinitのコードは次のようになります。

- (id)init { 
if (self = [super init]) { 
    mainTable = [[QuickCategories_iPhone_Table alloc] initWithNibName:@"QuickCategories_iPhone" bundle:nil ]; 
    mainNav = [[UINavigationController alloc] initWithRootViewController: mainTable ]; 
    return mainNav; 
} else { 
    return nil; 
} 
} 

この方法は、self.navigationItem.titleのようなすべての素敵な呼び出しにも取り組んでいます。

私はまだ別の方法でそれをやろうとしています。

関連する問題