解决问题后编辑:这个问题“通常”很容易解决,但花了几个小时思考并帮助找出我哪里出错了。似乎当我创建 ViewController2 时,我将它设置为 ViewController 的子类,瞧!如果它是一个子类,它将继承“母亲”类的所有内容。因此,当我删除文件时,创建了具有相同名称的新文件,但使用“UIViewController”的子类它可以工作!
问题的图片。
故事板:上面的segue是称为“Test1”的那个。它在视图之间连接。第二个较低的是“Test2”(未使用!),它连接在“Button”和 ViewController2 之间。
我是 Objective-C 编程的新手,遇到了一个问题。
如果你看图一,你会看到一个带有三个按钮的菜单。以编程方式制作的两个按钮名为“NEWBUTTON”和“NEWBUTTON2”。单击“NEWBUTTON”时,它会调用一个为 ViewController2 创建两个按钮的 segue。问题是“NEWBUTTON”和“NEWBUTTON2”也显示在 ViewController2 中。ViewController2 假设只有两个按钮和一个标签。
正如您从图片中看到的那样,名为“BUTTON”的按钮未显示在 ViewController2 中。“BUTTON”不是以编程方式创建的,它是通过从情节提要中拖放来创建的。
ViewController 中的两个按钮是如何制作的示例。AddMyButton 是一个创建按钮并接受两个参数(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.
}
按钮如何执行 segue 的示例:
-(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");
}
}