如何在没有插座的情况下引用子视图

时间:2010-02-14 22:19:43

标签: iphone uiview uiviewcontroller subview

刚开始iPhone开发时,我似乎错过了一些基本的东西。

在基于视图的应用程序中,我在ViewController实现文件中添加了一个UIView子类,并且可以设置一个值:

- (void)viewDidLoad {

    [super viewDidLoad];

 CGRect myRect = CGRectMake(20, 50, 250, 320);

 GraphView *graphView = [[GraphView alloc] initWithFrame:myRect];

 [self.view addSubview:graphView];

    graphView.myString = @"Working here";

}

当我尝试使用同一文件中的操作更改相同的值时,构建失败,因为graphView未声明:

- (void)puschButton1 {


 graphView.myString = @"Not working here";

}

因为我使用的是UIView子类,所以我的GraphView实例没有插座。

我如何获得对子视图的引用?或者应该以另一种方式完成?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以将graphView存储为类变量。

编辑:请注意,addSubview会增加对象的保留计数,在您班级的某个位置,您需要平衡allocreleaseaddSubview使用removeFromSuperviewrelease

答案 1 :(得分:0)

最简单的解决方案是为视图控制器设置graphView实例变量,而不是在viewDidLoad中声明它。

.h文件中添加以下内容:

@class GraphView;

@interface MyViewController : UIViewController {
    GraphView *graphView;
}

// ... method declarations ...

@end

如果您不想这样做,另一种方法是设置graphView的{​​{1}}属性,然后调用superview的tag方法以在需要时检索视图它

我不确定你的意思“因为我使用的是UIView子类,所以我的GraphView实例没有插座。”您通常在控制器类上声明出口,无论您使用的是viewWithTag:的子类都无关紧要。

顺便说一句,我会注意到你可能UIView release某个时候,或者你的内存泄漏。