こんにちは私はプログラムでボタンを作成し、それを別のビューに接続しましたが、セグエ警告が表示されました
ストーリーボードには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"];
}
}
ビューコントローラから直接開始されたセグエには、-[UIViewController performSegueWithIdentifier:sender:]
で使用するための識別子が必要です
この警告は、ストーリーボードのビューコントローラー(ボタンやアクションコントロールからではなく)からセグエを直接ドラッグし、識別子(名前)を入力しない場合に発生します。
これらに識別子を指定する必要があります。そうしないと、プログラムで呼び出す方法がありません...これが、このようなセグエをリンクする唯一の理由です。
Xcode 8では、警告をダブルクリックしてストーリーボードに問題のあるセグエを表示させ、名前を追加できるようにする必要があります。
これは私の問題を解決しました。
ストーリーボード>すべてのプッシュまたはポップリレーションセグエをチェックします。
各セグエ関係を選択>属性インスペクターのプロパティをチェック>ストーリーボードセグエセクション
そのセクションでは、すべてのセグエにidentifierを指定します。
Xcode 5では、セグエだけでなく、セグエにつながるビューコントローラーにも名前を付けることで、この警告を取り除きました。各ビューコントローラーにはストーリーボードIDが必要です。セグエに名前を付けるだけの場合、この(誤解を招く)警告が引き続き表示されます。
私も同じ警告を受けました。 XCoolが言ったように、識別子があるかどうかすべてのセグエをチェックする必要があります。
Xcool-古いプロジェクトを振り返ると、この問題も発生しました。各ストーリーボードのセグエをクリックして、それがビューコントローラーからのものかどうかを確認する必要がありました。もしそうなら、私はそれに識別子を与えます。
また、あなたのseguesを解く!を確認してください。これで問題が解決しました。