1

別のUIViewControllerへのセルセグエを持つUITableViewControllerを持つ単純なシナリオをテストしています。そのセグエの間に、アイテムの名前や価格などの情報をUIViewControllerに渡す必要があります。prepareForSegueとdidSelectRowAtIndexPathの使用の違いをテストしたかったので、これら2つのデータポイントを渡します。didSelectRowAtIndexPath:で機能するようですが、prepareForSegueでは機能しません。デバッグを行った後:

1-destinationViewControllerのIBOutletが初期化される前にprepareForSegueが発生するので、効果的に設定できないのではないかと思います。したがって、prepareForSegueは、IBOutlet以外のプロパティを渡すことを目的としているようです。

2-通常のプッシュセグエを使用している場合、didSelectRowAtIndexPath:メソッドから「segue.destinationViewController」にアクセスするにはどうすればよいですか。

PS:prepareForSegueをテストするときは、IBのセグエをプッシュに設定しています。didSelectRowAtIndexPath:をテストするときは、IBのセグエをモーダルに設定しています。

PS:本名との類似点はすべて偶発的です!

   -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"itemDetailSegue"])
    {
        NSIndexPath *indexPath=[self.tableView indexPathForSelectedRow];

        NSString *theItemName=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Name"];
        NSString *theItemPrice=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Price"];

        JuanDetailVC* juanDetailVC= (JuanDetailVC*) segue.destinationViewController;

        juanDetailVC.itemName.text=theItemName;
        juanDetailVC.itemPrice.text=theItemPrice;
    }
}


-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *theItemName=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Name"];
    NSString *theItemPrice=[[self.itemsForSale objectAtIndex:indexPath.row]objectForKey:@"Price"];

    JuanDetailVC* juanDetailVC= (JuanDetailVC*) self.presentedViewController;

    juanDetailVC.itemName.text=theItemName;
    juanDetailVC.itemPrice.text=theItemPrice;

}

ありがとう

4

1 に答える 1

2

あなたは、prepareForSegueでアウトレットプロパティを設定できないという点で正しいです。プロパティを別のプロパティに渡す必要があります。次に、宛先のView ControllerのviewDidLoadで、アウトレットのプロパティを設定します。例:ラベルのテキストを設定することはできません。2番目のプロパティ(たとえば、NSString *labelText)を作成し、viewDidLoadでラベルのテキスト(self.label.text = self.labelText)を設定する必要があります。

tableView:didSelectRowAtIndexPathの宛先ビューコントローラーにアクセスできません。インスタンスを割り当て/初期化して、自分でインスタンスを作成する必要があります。

于 2012-06-08T05:34:05.273 に答える