0

ストーリーボードのコアデータプログラムで、2 つのビューコントローラー間で文字列を渡そうとしています。私が設定した方法では、次のビューを 1 つのセクションのみにプッシュする必要があります。したがって、「prepareForSegue」ではなく「didSelectRowAtIndexPath」を使用します。以下は、「didSelectRow…」のコードです。「5」は、プッシュされるviewControllerクラスです。

- (void)tableView:(UITableView *)tableView
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (indexPath.section == 0)
    {
        five *five=[[five alloc]init];
        five.delegate = self;
        [self performSegueWithIdentifier:@"segue1" sender:self];
    }
}

「2」は親ビューです。以下は、「five」クラスで作成されたプロトコルで使用されるメソッドです。「friendString」は「two」クラスにあり、「fiveString」は「five」クラスにあります。ビューがポップされると、文字列は同じである必要があり、「2」の UITextField で「5」に追加された文字列を使用します。ただし、ビューがポップされても更新されません。

- (void)popFive:(five *)controller
{
    self.friendString=controller.fiveString;
    [self update];
    [self.tableView reloadData];
}

この問題は、「didSelectRow…」でシークがどのように行われるかに関連していると思います。ヘルプやアイデアをいただければ幸いです。ありがとう。

4

1 に答える 1

0

「didSelectRow...」をセグエとして使用する場合は、「prepareForSegue」も使用する必要があると思います。これを追加すると、子ビューがポップされたときに、2 つのビュー間で文字列を渡すことができるように見えました。以下のコードを含めました

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if (indexPath.section == 0)
{
    [self performSegueWithIdentifier:@"segue1" sender:self];
}

}

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

if ([segue.identifier isEqualToString:@"segue1"])
{
    five *five = segue.destinationViewController;
    five.delegate = self;

}   
}
于 2012-06-11T17:20:21.827 に答える