web-dev-qa-db-ja.com

セグエios5ストーリーボードuitableviewのデータを詳細ビューに渡す方法

ストーリーボードを使用してiOS5でアプリを作成しています。ナビゲーションコントローラーに埋め込まれたtableviewcontrollerがあり、tableviewcontrollerのセルをクリックすると、そのセルトピックに関する詳細が詳細ビューに渡されます。 plistを使用して、テーブルビューと詳細ビューにデータを入力します。ストーリーボードを使用せずにこれをうまくやったが、ストーリーボードの使い方を学びたい。 tableviewcontrollerから詳細ビューに移動します。

シークの私のコードは次のとおりです。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"DetailViewControllerSeque"])
    {   DetailViewController *detailViewController = [segue destinationViewController];  
        NSString *path = [[NSBundle mainBundle] bundlePath];
        NSString *finalPath = [path stringByAppendingPathComponent:@"questList.plist"];
        NSArray *tempArray = [finalPath valueForKey:@"description"];
        NSString *descriptionString = [tempArray valueForKey:@"description"];
        detailViewController.detailDescriptionText.text = descriptionString;    
    }
}

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

25
Catacomber

私は同じ問題を抱えていました(iOS5の経験不足から)。

これは、テーブルセルがタップされたときにセグエを使用するテーブルビューを備えたiOS5 SDKのサンプルアプリであることがわかります: "Simple Drill Down"。

https://web.archive.org/web/20130513140140/http://developer.Apple.com:80/library/ios/#samplecode/SimpleDrillDown/Introduction/Intro.html

テーブルセルにセグエを設定し、ストーリーボードファイルに名前を付けます。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    /*
     When a row is selected, the segue creates the detail view controller as the destination.
     Set the detail view controller's detail item to the item associated with the selected row.
     */
    if ([[segue identifier] isEqualToString:@"ShowSelectedPlay"]) {

        NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
        DetailViewController *detailViewController = [segue destinationViewController];
        detailViewController.play = [dataController objectInListAtIndex:selectedRowIndex.row];
    }
}
66
M. Bedi

同じ問題が発生しました。RayWenderlichチュートリアルの次の部分で、テーブルセルを選択し、Ctrlキーを押しながらビューコントローラーにドラッグする必要があることがわかりました。次に、performSegueWithIdentifierdidSelectRowAtINdexPathを呼び出します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self performSegueWithIdentifier:@"mySegueId" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{   
        NSLog(@"prepareForSegue: %@", segue.identifier  );      
        if ([segue.identifier isEqualToString:@"mySegueId"])
        {
            DetailController *detailController = segue.destinationViewController;
            detailController.delegate = (id)self;
            detailController.selected = selectedRow;
        }   
}
12
neefje

呼び出し不要:_[self performSegueWithIdentifier:@"mySegueId" sender:self];_

_NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];_を使用して、- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{...}関数で選択した情報を取得できます。

1
Sijiu

この方法を試してください

あなたのセグエ名(テーブルビューセルから詳細ビューまで)。次に、

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{


    if([segue.identifier isEqualToString:@"yourSegueName"]){

        DetailViewController * detailViewController =segue.destinationViewController;
        detailViewController =[self.yourTableViewDataArray objectAtIndex:[self.yourTableView indexPathForSelectedRow].row];

    }

}

SecondViewController/DetailViewControllerをインポートすることを忘れないでください

同じ問題が発生しましたが、ストーリーボードではまだ解決していません。ただし、セグエはtableviewcontroller全体ではなく、セルから開始する必要があると思います。プロトタイプセルを使用している場合、これは機能しますが、コードで作成されたセルタイプについてはわかりません。このトピックに関するどんな助けも感謝します。

編集: http://kurrytran.blogspot.com/2011/10/ios-5-storyboard-and.html のチュートリアルは、セグエソリューションが存在せず、次のように移行する必要があることを示唆していますコード内の詳細ビュー。これがどれほど正しいかはわかりませんが、誰かが純粋なストーリーボード/セグエソリューションを見せてくれるまでは、そのようにします;)。

0
morgler