1

1 つのテーブル ビュー コントローラーと別のビュー コントローラーがあります。選択したセル (テーブル ビューから) からビュー コントローラーにデータを渡し、ビュー コントローラーでラベルを更新したいと考えています。私は次の方法でこれをやっています:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"SubRecipeConnectorSegue"])
{
     RecipeDetailViewController *destViewController = segue.destinationViewController;
     destViewController.recipeName = selectedRecipe;

 }
}

問題は、初めてセルを選択したときにラベルに表示されないことです。しかし、2番目の値を選択しているとき; 最初に選択した値がラベルに表示されています。同様に、3 番目の値を選択すると、2 番目の値がラベルに表示されます。何が問題なのか教えてください。助けてください。

4

2 に答える 2

0

didSelectRowAtIndexPath の対応するセルからデータを取得し、セグエを文法的に実行する必要があります。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *recipeString = [dataArray objectAtIndex:indexPath.row];
    [self performSegueWithIdentifier:@"SubRecipeConnectorSegue" sender:recipeString];
}

次に、 prepareForSegue メソッドを次のように変更します

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSString*)recipeString
{
    if ([segue.identifier isEqualToString:@"SubRecipeConnectorSegue"])
    {
        RecipeDetailViewController *destViewController = segue.destinationViewController;
        destViewController.recipeName = recipeString;

    }
}

セルにデータをどのように格納したかわかりません。そのため、私が書いた例とは異なる場合があります。実装にサポートが必要な場合は、お知らせください。

于 2012-12-06T16:58:01.640 に答える
0

これを行う方法は、セグエを手動でトリガーすることです。IB では、1 つの VC から別の VC へのセグエを描画します (テーブル セルからではありません)。必ず識別子を付けてください。tableView:didSelect で、選択した文字列を設定し、performSegueWithIdentifier: を呼び出します。

あなたが見ている問題は、セグエ prep が tableView デリゲートの前に呼び出されることです。そのため、新しい VC は以前の選択を提示していますが、これは最初は未定義です。

于 2012-12-06T14:34:12.103 に答える