0

Objective CとXCode 4.2を使用したiPhone開発は初めてです。現在、UITableViewController のインスタンス化に成功しており、マルチレベルの json データ ツリーをトラバースできます。ただし、リーフ ページの UI を確立するのに問題があります。これまでのコード スニペットをお見せしましょう。

- (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 ステートメントの最初の部分で子ノードがあるかどうかを確認し、ある場合は別の uinavTableViewController を作成します。この部分は完璧に機能します。

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

StoryboarD に描いたものが uinavMenuItem に表示されない原因は何ですか?

4

2 に答える 2

2

ストーリーボードで作成したビュー コントローラーを初期化したい場合は、UIStoryboard-instantiateViewControllerWithIdentifier. この識別子は、View Controller のプロパティの下にあるストーリーボードで定義します。ストーリーボードにあるものをロードしていないため、ビューはロードされていますが空です。-loadView見つからないために呼び出している可能性があります。

識別子を入力する場所は次のとおりです。

ここに識別子を入力します

于 2012-04-30T01:36:27.357 に答える
0

ストーリーボードを使用している場合は、UITableViewController からリーフ コントローラーへのセグエを作成する方が簡単です。これを行うには、テーブル ビュー コントローラーを Control キーを押しながらクリックし、プッシュ セグエをリーフ コントローラーにドラッグします。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;
    }
}
于 2012-04-30T01:33:29.900 に答える