1

解决问题后编辑:这个问题“通常”很容易解决,但花了几个小时思考并帮助找出我哪里出错了。似乎当我创建 ViewController2 时,我将它设置为 ViewController 的子类,瞧!如果它是一个子类,它将继承“母亲”类的所有内容。因此,当我删除文件时,创建了具有相同名称的新文件,但使用“UIViewController”的子类它可以工作!

问题的图片。

视图控制器 1 和 2

故事板:上面的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");
    }
}
4

3 回答 3

0

在 viewDidLoad 方法中实现此代码

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button1.frame = CGRectMake(50, 10, 70, 50);
[button1 setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[button1 setBackgroundColor:[UIColor clearColor]];
[button1 setTag:1];
[button1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button1 setTitle:@"Button1" forState:UIControlStateNormal];
[self.view addSubview:button1];

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button2.frame = CGRectMake(130, 10, 70, 50);
[button2 setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[button2 setBackgroundColor:[UIColor clearColor]];
[button2 setTag:2];
[button2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];
[button2 setTitle:@"Button2" forState:UIControlStateNormal];
[self.view addSubview:button2];

它会在基于故事板的应用程序上创建两个按钮。它也与没有故事板应用程序的情况相同。我希望它可以帮助你。谢谢

于 2013-05-08T12:37:34.940 回答
0

试试看....

UIButton *oddBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
oddBtn.frame = CGRectMake(10, 10, 70, 70);
[oddBtn setBackgroundImage:[UIImage imageNamed:@"myImageName"] forState:UIControlStateNormal];
[oddBtn setBackgroundColor:[UIColor clearColor]];
[oddBtn setTag:i];
[oddBtn addTarget:self action:@selector(getCategoryDetail:) forControlEvents:UIControlEventTouchDown];
[self.View addSubview:oddBtn];

希望我有所帮助

于 2013-05-08T12:24:11.873 回答
0

最后我明白了..:) 通过创建一个新项目来模拟你的问题。

检查故事板中第二个视图控制器的类。它将是 ViewController。我对吗?更改为ViewController2

于 2013-05-08T14:06:38.263 回答