SubView未使用IB正确初始化

时间:2009-12-08 04:55:39

标签: iphone objective-c xcode uiview

我无法使用Interface Builder正确初始化我的SubView。我有以下View层次结构(UIWindow - > BlankCanvasView - > StalkerView)。 BlankCanvasView是UIView的子类,StalkerView是BlankCanvasView的IBOutlet

@interface BlankCanvasView:UIView {

IBOutlet UIView *stalker;

}

@end

我在BlankCanvasView的追踪者出口与子视图之间建立了连接。但是,在我的BlankCanvasView的touchesBegin方法中,追踪者出口是零。请参阅下面的touchesBegin。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

NSLog(@"Touch Begin detected!!!");
NSLog(@"Stalker instance %@", stalker);

[UIView beginAnimations:@"StalkerAnimation" context:nil];

UITouch *touch = [touches anyObject];

    //stalker is nil here!!!
[stalker setCenter:[touch previousLocationInView:self]];

[UIView commitAnimations];

}

我错过了什么?当我尝试按照iTunesU上的示例时,看起来我的演示应用程序都没有正确加载任何子视图。

1 个答案:

答案 0 :(得分:0)

如果您在IB中创建“跟踪者”视图,它必须是视图层次结构的一部分(即,作为另一个视图的子视图添加),或者必须由您的代码保留,以便它不会装载后释放。如果对stalker变量使用retain属性,则会自动为您处理:

@interface BlankCanvasView : UIView
{
    UIView *stalker;
}

@property (nonatomic, retain) IBOutlet UIView *stalker;

@end

确保你@synthesize缠扰者;在您的BlankCanvasView的实现中,并在取消分配视图时将属性设置为nil:

@implementation BlankCanvasView
@synthesize stalker;

- (void)dealloc
{
    self.stalker = nil;
    [super dealloc];
}

@end