我正在使用这个应用程序,它在第二个视图上询问(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];
...
}
答案 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是最好的之一。