0
 AView.m
       UIButton *btn = [[UIButton alloc]initWithFrame()];
       [btn addTarget:self action:@selectior(perpareForSegue:sender:) forControlEvents:UIControlEventTouchUpInside];
       [self.view addSubview:btn];


-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
       //I want to get destinationViewController of segue with identifier"toNextView" 
       // and then perform the segue
       // Difficulties that I encounter is that I have a NSInvalidArgumentException
       // Is that mean the view controller doesn't know the existence of the segue?
       // I have connected two controller with a segue
}

識別子 "toNextView" を使用してセグエの destinationViewController を取得し、セグエを実行したい 遭遇する問題は、NSInvalidArgumentException があることです ビュー コントローラーがセグエの存在を認識していないということですか? 2 つのコントローラーをセグエで接続しました。

4

1 に答える 1

0

UIStoryboardSegueのクラス リファレンスを見てください。

セグエがトリガーされると、メソッドprepareForSegue:sender:がストーリーボード ランタイムによって呼び出されます。セグエを実行するために呼び出されることを意図したものではありません。

クラスリファレンスからの説明は次のとおりです。

セグエがトリガーされると、視覚的な遷移が発生する前に、ストーリーボード ランタイムは現在のビュー コントローラーの prepareForSegue:sender: メソッドを呼び出して、表示しようとしているビュー コントローラーに必要なデータを渡すことができます。

クラスリファレンスから:

必要に応じて、UIViewController の performSegueWithIdentifier:sender: メソッドを使用して、プログラムでセグエを開始することもできます。プログラムで追加されたために Interface Builder で使用できないソースからセグエを開始するために、これを行う場合があります。

したがって、ボタンのセレクターを指定し、セレクター内でperformSegueWithIdentifier:sender:メソッドを呼び出すだけです。

[btn addTarget:self action:@selector(whateverAction) forControlEvents:UIControlEventTouchUpInside];

- (void)whateverAction {
    [self performSegueWithIdentifier:@"toNextView" sender:nil];
}

また、セグエの宛先ビュー コントローラーにオブジェクトを渡したい場合は、クラス リファレンスで説明されているように、prepareForSegue:sender:メソッドが使用されます。次に例を示します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"toNextView"]) {
        DestinationViewController *vc = (DestinationViewController *)[segue destinationViewController];
        //do whatever you want to do with vc, including passing of data, setting property, etc.
    }
}
于 2013-06-01T09:15:56.530 に答える