在View2中以编程方式添加的按钮显示在View2中

时间:2013-05-08 12:15:04

标签: ios objective-c uiview

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

问题的图片。

ViewController 1 and 2

Storyboard:上部segue是一个名为“Test1”的部分。它连接在视图之间。第二个较低的是“Test2”(未使用!),它连接在“Button”和ViewController2之间。

我是Objective-C编程的新手,并遇到了一个问题。

如果你看一张图片,你会看到一个带有三个按钮的菜单。以编程方式创建的两个按钮名为“NEWBUTTON”和“NEWBUTTON2”。单击“NEWBUTTON”时,它会调用一个segue,为ViewController2创建两个按钮。问题是“NEWBUTTON”和“NEWBUTTON2”也会显示在ViewController2中。 ViewController2假设只有两个按钮和一个标签。

从图片中可以看出,ViewController2中没有显示名为“BUTTON”的按钮。 “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");
    }
}

3 个答案:

答案 0 :(得分: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];

希望我帮助

答案 1 :(得分: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];

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

答案 2 :(得分:0)

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

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