0

ボタンのホームページを備えたストーリーボードがあります。ボタンに触れると、tableviewcontrollerが埋め込まれたnavコントローラーに接続されます。テーブルビューが表示されると、アイテムのリストが表示されます。ユーザーがリスト内のアイテムに触れると、別のテーブルビューまたは詳細ビューのいずれかをプッシュしたいと思います。

これが私がしていることです:

私のListTableViewControllerでは、これは私のdidSelectRowAtIndexPathです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];
    DSObject * obj = _m_DSObjects[row];

    if (obj.nType == 1)
    {
        ListTableViewController * tvc = [[ListTableViewController alloc]
                                               initWithStyle:UITableViewStylePlain];
        [self.navigationController pushViewController:tvc animated:YES];
    }
    else
    {
        MyDetaisViewController * vc = [[MyDetaisViewController alloc]
                                               initWithStyle:UITableViewStylePlain];
        [self.navigationController pushViewController:vc animated:YES];
    }
}

基本的に、タイプ1(別のリスト)の場合は別のListViewControllerを作成しますが、タイプ2(詳細)の場合は詳細ビューを表示します。

私の問題は、それがリストの場合、私のリストがアイテムに入力されないことです。セルの行はありますが、空白です。セルのプロトタイプを使用していないようです。

私がこれを間違ってやっていて、私が必要なことを達成する方法についてのアドバイスを探しているなら、私は曲がりくねっています。

助けてくれてありがとう!

4

1 に答える 1

1

すでにストーリーボードを使用しているので、より良いアプローチは、からListTableViewController新しいリストコントローラー、および詳細ビューコントローラーへのセグエを作成することです。

didSelectRowAtIndexPath次に、次のようなものに変更できます。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];
    DSObject * obj = _m_DSObjects[row];

    if (obj.nType == 1)
    {
        // assuming you named your segue "PresentListController"
        [self performSegueWithIdentifier:@"PresentListController" sender:self];
    }
    else
    {   // assuming you named your segue "PresentDetailsController"
        [self performSegueWithIdentifier:@"PresentDetailsController" sender:self];
    }
}

それらのいずれかにパラメータを渡す必要がある場合は、次を使用できますprepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.destinationViewController isKindOfClass:[ListTableViewController class]]) {

        ListTableViewController* listController = (ListTableViewController*)segue.destinationViewController;            
        listController.someParam = someValue;

        return;        
    }

    if ([segue.destinationViewController isKindOfClass:[MyDetailsViewController class]]) {

        MyDetailsViewController* detailsController = (MyDetailsViewController*)segue.destinationViewController;
        detailsController.someOtherParam = someOtherValue;

        return;
    }
}

編集:

prepareForSegueのをチェックする代わりに、適切なセグエclassのチェックをdestinationViewController使用できます。これsegue.identifierは、セグエがどこに向かっているのかをチェックする別の方法です。

于 2012-10-19T14:24:40.663 に答える