添加子视图似乎什么都不做

时间:2011-03-29 15:51:34

标签: objective-c cocoa-touch uiview addsubview

在我的应用程序中,当用户单击infoButton时,它应该在特定位置向屏幕添加另一个视图。我正在尝试使用以下方法实现此行为:

- (IBAction)showInfo1:(id)sender
  {
    UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)];   
    [self.view addSubview:myView1]; 
  }

(我在班级的头文件中宣布了所有内容。)

当我运行代码并按下按钮时,似乎没有任何事情发生(我没有看到新视图)。

我还注意到XCode正在显示以下警告:

  

'myView1'的本地声明隐藏了实例变量。

有没有人有任何想法?

2 个答案:

答案 0 :(得分:4)

你怎么知道没有变化?

看起来myView1实际上并不包含任何内容。尝试设置myView1的背景颜色

- (IBAction) showInfo1: (id) sender
{
    UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)];   
    myView1.backgroundColor = [UIColor redColor];
    [self.view addSubview: myView1]; 
}

要在特定点打开它,您需要更改CGRectMake()中的参数,例如

在左上角打开它,宽度为50,高度为20,你会这样做:

CGRectMake(0, 0, 50, 20)

答案 1 :(得分:1)

“'myView1'的本地声明隐藏了实例变量。”出现消息,因为您已在类中声明了一些具有相同名称的属性(即使类型不同)。

如果您将UIView *myView1放在类定义中,那么您的方法将类似于

- (IBAction)showInfo1:(id)sender{
  myView1 = [[UIView alloc] initWithFrame:CGRectMake(25,25,50,20)];   
  [self.view addSubview:myView1]; 
}

以下是更多注意事项:您必须在停止使用时释放myView1,避免多次放置等等,但此处我们有基本想法。

最后,也许您的视图已添加,但是因为它还没有包含任何内容,您没有注意到它。您还想检查UIViewController以查看是否适合您。