2012-04-30 12 views
0

私は客観的なCとXCode 4.2でiphone開発に新しいです。今、私はUITableViewControllerを正しくインスタンス化し、複数レベルのjsonデータツリーを走査できます。しかし、リーフページのUIを確立するのに問題があります。私は、これまであなたのコードのスニペットを表示してみましょう:子ノードが存在する場合ので、別のuinavTableViewControllerを作成した場合iphone uiviewcontrollerが表示されていませんか?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
     int row = [indexPath row]; 
     NSString * currentrow = [NSString stringWithFormat:@"%d.",row]; 


     NSDictionary * item = [dataArray objectForKey:currentrow]; 
     NSDictionary * children = [item objectForKey:@"children"]; 
     if(children != nil) 
     { 
      uinavTableViewController *childView = [[uinavTableViewController alloc] init]; 
      childView.dataArray = children; 
      [self.navigationController pushViewController:childView animated:YES]; 
     } 
     else 
     { 
      uinavMenuItem * childView = [[uinavMenuItem alloc] init]; 
      //uinavSecondViewController * childView = [[uinavSecondViewController alloc] init]; 
      [self.navigationController pushViewController:childView animated:YES]; 
     } 
} 

ので、if文の最初の部分は、チェックします。この部分は完全に機能します。

elseステートメントは、uinavMenuItemを使用してリーフページを作成します。シミュレータでこれを実行すると、リーフページは黒い画面に過ぎません。私は自分のNSLogを見て、uinavMenuItem viewDidLoadが起動したことを確認できます。コントローラのコードは正常に動作していますが、ストーリーボードに描いたビューにリンクする方法はわかりません。

私はstoryboarDで描いたものをuinavMenuItemが表示できないように間違っていますか?

答えて

2

ストーリーボードで作成したビューコントローラを初期化する場合は、UIStoryboard-instantiateViewControllerWithIdentifierを使用します。この識別子は、ビューコントローラのプロパティのストーリーボードで定義します。ストーリーボードにあるものがロードされていないため、ビューはロードされていますが空です。それはおそらく-loadViewを見つけることができないのでそれを呼び出すでしょう。

Enter the identifier here

+0

ありがとう、 "ビューコントローラのプロパティの下でストーリーボードの識別子を定義する"ことについて詳しく説明できますか?私はXcodeパネルの周りを見ていますが、明瞭にするためにinstantiateViewContollerWithIdentifier – John

+0

画像を追加したようなものは特定できません。 – Morrowless

+0

いいえ、私は識別子を作った。私はelse文を次のように置き換えました: 'uinavMenuItem * childView = [self.storyboard instantiateViewControllerWithIdentifier:@" menuleafsegue "]; [self.navigationController pushViewController:childView animated:YES]; '正しい行に沿っていますか?今はシミュレータが私のuinavMenuItemには行きません。 – John

0

ストーリーボードを使用している場合は、UITableViewControllerからリーフコントローラまでのセグを作成する方が簡単です。これを行うには、テーブルビューコントローラーをコントロールでクリックし、プッシュセグをリーフコントローラーにドラッグします。 X-Codeサイドバー内で、セグと識別子を入力します。あなたのコード内で次に

、代わりに使用することができます[self.navigationController pushViewController]を呼び出す:

if(children != nil) 
{ 
    [self performSegueWithIdentifier: @"YourIdentifierHere" sender: self]; 
} 
else 
{ 
    [self [performSegueWithIdentifier: @"TheOtherIdentifier" sender: self]; 
} 

をuinavTableViewControllerにデータを渡すには、あなたがセグエを行い、同じコントローラにprepareForSegueメソッドを使用します。

- (void)prepareForSegue: (UIStoryboardSegue *)segue sender: (id)sender 
{ 
    // Because you have two segues, you need to check the identifier 
    if ([[segue identifier] isEqualToString: @"YourIdentifierHere"]) 
    { 
     uinavTableViewController childView = (uinavTableViewController *)segue.destinationViewController; 
     childView.dataArray = children; 
    } 
} 
+0

おかげで、私はセグエに識別子を与えるHOWTO把握することはできません:あなたは、識別子を入力するのはここ

です。私はctrl + xcodeの右側のサイドバーでいくつかのthignsをクリックしてみましたが、私は明らかにセグの識別子に関連する何かに気づいていません – John

+0

最初にコントロールをクリックして "Storyboard Segues"の下で、リーフコントローラに「プッシュ」します。ストーリーボードはコントローラーの間に矢印を作成します(これはセグーです)。矢印(または矢印の中央のアイコン)をクリックし、属性インスペクタ(Xcodeの右側のサイドバー、左から4番目のタブ、ベルトバックルのように見える)を開き、 "Identifier"を編集します。ありがとうございます。 –

+0

今私はシミュレータを実行すると、私はSIGABRTエラーが表示されます。だから私はこれはメモリエラーか、私は正しくsomethignをインスタンス化していないと思いますか? – John

関連する問題