从第二个视图在视图上创建一个按钮

时间:2009-10-20 11:52:24

标签: iphone objective-c uiview

我正在使用这个应用程序,它在第二个视图上询问(textfield)在第一个视图上创建的按钮的名称。指定名称并按下OK按钮后,第一个视图会弹出(按要求),但没有新按钮,尽管确实已创建。我可以在第二种视图方法中使用以下代码,在呈现之前“刷新”第一个视图。这段代码出了什么问题?还有其他方法吗?谢谢。

-(void)initWithView:(View1Controller *)aSuperview
{
    theSuperview = aSuperview;
}

- (IBAction)itemNameButton
{
    ...
    CGRect rectang;
    rectang = CGRectMake(0, 0, 320, 460);// just in case
    [theSuperview.view setNeedsDisplayInRect:rectang];
    ...
}

2 个答案:

答案 0 :(得分:0)

您应该遵循模型 - 视图 - 控制器范例。在其他视图中创建按钮的视图通常是一件坏事。相反,应该有一个控制器(可能是一个UIViewController子类),当用户单击OK(通过操作和文本字段的出口)处理从视图2接收输入,然后告诉视图1(自定义视图子类)使用一组定义的方法(类似于-addButtonWithTitle:(NSString *)buttonTitle)。添加按钮本身的过程应该非常简单,例如:

- (void)addButtonWithTitle:(NSString *)buttonTitle {
    UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // whatever type you want

    newButton.titleLabel.text = buttonTitle;

    [self addSubview:newButton];
    newButton.center = self.center; // set your position here
}

答案 1 :(得分:0)

视图控制器的职责是控制给定视图。它的责任是与其他控制器通信,以便让他们改变他们的观点,所以做这种事情通常表明设计不好。

你应该在superview的控制器中有一个方法,它将按钮添加到其视图中,然后使用委托,以便在需要添加按钮时通过子视图通知。

对于代表和协议的简单介绍,我发现this blog post是最好的之一。