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