問題を解決した後に編集: 問題は「通常」簡単に解決できましたが、考えて、どこが間違っていたのかを理解するのに何時間もかかりました。ViewController2 を作成したときに、それを ViewController のサブクラスに設定したようです。サブクラスの場合、「親」クラスからすべてを継承します。そのため、ファイルを削除したときに、同じ名前の新しいファイルを作成しましたが、「UIViewController」のサブクラスで機能しました!
問題の写真。
ストーリーボード: 上のセグエは「Test1」と呼ばれるものです。ビュー間で接続されます。下から2番目は「Test2」(使われていません!)で、「Button」とViewController2の間に接続されています。
私は Objective-C プログラミングの初心者で、問題にぶつかりました。
写真 1 を見ると、3 つのボタンがあるメニューが表示されます。プログラムで作成された 2 つのボタンは、"NEWBUTTON" と "NEWBUTTON2" という名前です。「NEWBUTTON」をクリックすると、ViewController2 の 2 つのボタンを作成するセグエが呼び出されます。問題は、ViewController2 にも「NEWBUTTON」と「NEWBUTTON2」が表示されることです。ViewController2 には、2 つのボタンと 1 つのラベルしかないと想定されています。
写真からわかるように、「BUTTON」という名前のボタンは ViewController2 に表示されません。「BUTTON」はプログラムで作成するのではなく、ストーリーボードからドラッグ&ドロップで作成します。
ViewController の 2 つのボタンの作成方法の例。AddMyButton は、ボタンを作成し、2 つのパラメーター (NSString と int) を取る関数です。この prepareForSegue メソッドは、最初の ViewController にあります。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Test1"])
{
ViewController2 *vc = [[ViewController2 alloc]init];
vc = [segue destinationViewController];
UIButton *bt = [[UIButton alloc]init];
[vc.view addSubview:bt = [self addMyButton:@"HAHA": 0]];
[vc.view addSubview:bt = [self addMyButton:@"HLAAA": 50]];
vc.laabel.text = @"HAh";
}
/*else if ([segue.identifier isEqualToString:@"Test2"])
{
ViewController2 *vc = [[ViewController2 alloc]init];
vc = [segue destinationViewController];
UIButton *bt = [[UIButton alloc]init];
[vc.view addSubview:bt = [self addMyButton:@"HAHA": 0]];
[vc.view addSubview:bt = [self addMyButton:@"HLAAA": 50]];
vc.laabel.text = @"HAh";
}*/
}
最初のビューのボタンの作成例:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *ny = [self addMyButton:@"NEWBUTTON": 100];
[self.view addSubview:ny];
ny = [self addMyButton:@"NEWBUTTON2": 150];
[self.view addSubview:ny];
// Do any additional setup after loading the view, typically from a nib.
}
ボタンがセグエを実行する方法の例:
-(void)buttonPressed:(UIButton*) sender
{
if ([sender.titleLabel.text isEqual: @"NEWBUTTON"]) {
[self performSegueWithIdentifier:@"Test1" sender:sender];
} else if ([sender.titleLabel.text isEqual: @"NEWBUTTON2"]) {
[self performSegueWithIdentifier:@"Test2" sender:sender];
} else {
NSLog(@"HELLO");
}
}