20

こんにちは私はプログラムでボタンを作成し、それを別のビューに接続しましたが、セグエ警告が表示されました

ストーリーボードの方法を使うべきprepareForSegueですが、方法がわかりません。インターネット上にいくつかのサンプルがありますが、そのサンプルを使用するとエラーが発生します。助けてください。

これが私のコードです

ボタンの作成

 UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
 button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
 button.tag = currentTag;
 currentTag++;
 [button.layer setBorderColor: [[UIColor blackColor] CGColor]];
 [button.layer setBorderWidth: 1.0];
 [button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
 button.frame = CGRectMake(80*x, 32*y, 80, 32); 
 [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
 [buttonView addSubview: button];

ボタンのアクション

-(void)buttonPressed:(UIButton *)button
{
    NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
    [self performSegueWithIdentifier:@"WeekView" sender:self];    
}

セグエの準備 MY警告

ビューコントローラから直接開始されたセグエには、-[UIViewController PerformSegueWithIdentifier:sender:]で使用する識別子が必要です。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"WeekView"]) {
        [segue.destinationViewController setTitle:@"WeekView"];
    }
}
4

4 に答える 4

31

ビュー コントローラから直接開始されたセグエには、次で使用するための識別子が必要です。[UIViewController performSegueWithIdentifier:sender:]

この警告は、ストーリーボードのビュー コントローラーから (別名、ボタンやアクション コントロールからではなく) セグエを直接ドラッグし、識別子 (名前) を入力しない場合に発生します。

これらのものに識別子を与える必要があります。そうしないと、プログラムでそれらを呼び出す方法がありません...これが、このようなセグエをリンクする唯一の理由です。

Xcode 8 では、警告をダブルクリックして問題のあるセグエをストーリーボードに表示させ、名前を追加できるようにする必要があります。

于 2012-10-11T15:59:21.143 に答える
13

これで私の問題は解決しました。

ストーリーボードに移動し、すべてのプッシュまたはポップ リレーション セグエを確認します。

各セグエ関係を選択 > 属性インスペクターのプロパティを確認 > ストーリーボード セグエ セクション

そのセクションで、すべてのセグエの識別子を指定します。

ここに画像の説明を入力

于 2014-07-28T06:38:55.557 に答える
6

Xcode 5 では、セグエだけでなく、それらが導くビュー コントローラーにも名前を付けることで、この警告をなくしました。各ビュー コントローラーにはストーリーボード ID が必要です。セグエに名前を付けるだけの場合、この (誤解を招く) 警告が引き続き表示されます。

于 2013-10-30T19:17:27.780 に答える