菜鸟教程小白 发表于 2022-12-13 07:58:41

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]
查看完整版本: iphone - 如果 View 是属性,则不执行 InitWithFrame