2009-10-20 88 views
0

我有这个应用程序我正在处理,在第二个视图询问(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

发布代码,您可以在其中实际创建按钮并将其添加到视图中。您发布的代码看起来与您所描述的问题无关 – Vladimir 2009-10-20 12:06:51

+0

Vladimir,我发布了更详细的代码。 – BigJoke 2009-10-21 10:45:51

+0

请不要混合视图和视图控制器。他们是两个不同的概念。 – kennytm 2010-05-01 16:15:05

回答

0

你应该坚持模型 - 视图 - 控制器范例。在其他视图中创建按钮的视图通常是一件坏事。相反,应该有一个控制器(可能是一个UIViewController子类),当用户单击OK(通过动作和文本字段的出口),然后告诉视图1(一个自定义视图子类)时,处理接收来自视图2的输入。使用一组定义的方法(如-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 
} 
+0

本,请结帐我的帖子。 – BigJoke 2009-10-21 10:44:54

0

视图控制器的职责是控制给定的视图。其责任是而不是与其他控制器进行通信,以要求他们改变他们的意见,所以做这种事通常是一个糟糕的设计的迹象。

您应该在您的超级视图控制器中添加一个方法,该方法会将按钮添加到其视图中,然后使用委派来在您的子视图需要添加按钮时通知您。

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

相关问题