我有继承自 UIView 的 GraphicView 类。它的initWithFrame 方法是:
@implementation GraphicsView
- (id)initWithFrameCGRect)frameRect
{
self = [super initWithFrame:frameRect];
// Create a ball 2D object in the upper left corner of the screen
// heading down and right
ball = [[Object2D alloc] init];
ball.position = [[Point2D alloc] initWithX:0.0 Y:0.0];
ball.vector = [[Vector2D alloc] initWithX:5.0 Y:4.0];
// Start a timer that will call the tick method of this class
// 30 times per second
timer = [NSTimer scheduledTimerWithTimeInterval1.0/30.0)
target:self
selectorselector(tick)
userInfo:nil
repeats:YES];
return self;
}
使用 Interface Builder 我已将 UIView (class = GraphicView) 添加到 ViewController.xib 。我添加了 GraphicView 作为属性:
@interface VoiceTest01ViewController : UIViewController {
IBOutlet GraphicsView *graphView;
}
@property (nonatomic, retain) IBOutlet GraphicsView *graphView;
- (IBAction)btnStartClickedid)sender;
- (IBAction)btnDrawTriangleClickedid)sender;
@end
但是这段代码不起作用,我需要调用 [graphView initWithFrame:graphView.frame] 使其起作用。
- (void)viewDidLoad {
[super viewDidLoad];
isListening = NO;
aleatoryValue = 10.0f;
// Esto es necesario para inicializar la vista
[graphView initWithFrame:graphView.frame];
}
我过得好吗?有没有更好的方法来做到这一点?
我不知道为什么添加 GraphicView 作为属性时不会调用 initWitFrame。
Best Answer-推荐答案 strong>
initWithFrame 在从 NIB 加载时不会被调用,而是 initWithCoder 。
如果您可能同时使用从 NIB 加载和编程创建,您应该创建一个通用方法(initCommon 也许?)您将从 initWithFrame 和initWithCoder .
哦,你的 init 方法没有使用推荐的做法:
- (id)initWithFrameCGRect)frameRect
{
if (!(self = [super initWithFrame:frameRect]))
return nil;
// ...
}
你应该经常检查[super init...] 的返回值。
关于iphone - 如果 View 是属性,则不执行 InitWithFrame,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/6356162/
|