开发者

How to reference a subview without outlet

Just beginning with iPhone development i seem to miss something fundamental.

In a View based application i'm adding programaticaly a UIView subclass in the ViewController implementation file and can set a value:

- (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";

}

When i try t开发者_开发问答o change the same value with an action in the same file, the Build fails because graphView is undeclared:

- (void)puschButton1 {


 graphView.myString = @"Not working here";

}

Because I use a UIView subclass there is no outlet for my GraphView instance.

How can i get a reference to my subview? Or should this be done in another way?

Thanks in advance

Frank


The easiest solution is to make graphView an instance variable for your view controller, instead of declaring it in viewDidLoad.

Put something like this in your .h file:

@class GraphView;

@interface MyViewController : UIViewController {
    GraphView *graphView;
}

// ... method declarations ...

@end

If you don't want to do that, another way is to set graphView's tag property, and then call the superview's viewWithTag: method to retrieve the view when you need it.

I'm not sure what you mean by "Because I use a UIView subclass there is no outlet for my GraphView instance." You generally declare outlets on your controller class, and it doesn't matter whether you are using a subclass of UIView.

As an aside, I'll note that you should probably release that GraphView at some point, or you'll have a memory leak.


You could store graphView as a class variable.

EDIT: note that addSubview will increase the retain count of the object, somewhere in your class you will need to balance the alloc with a release and the addSubview with a removeFromSuperview or a release.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜