【问题标题】:Why is awakeFromNib not called when the view is visited again?为什么再次访问视图时不调用 awakeFromNib?
【发布时间】:2011-04-06 19:50:58
【问题描述】:

我想知道是否有等效于awakeFromNib的方法。

我的应用有 2 个视图,第二个视图有一个子类 (UIView),我用它来绘制。

我使用从awakeFromNib 调用的计时器来为绘图设置动画。

- (void) awakeFromNib
{
    timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:selfselector:@selector(ReDraw) userInfo:nil repeats:YES];
}

- (void) ReDraw
{
    i++;
    [self setNeedsDisplay];
}

现在,当我返回第一个视图并返回此视图时,绘图仍在运行(不再调用 awakeFromNib)。

当我返回第一个视图时,计时器不会停止。我希望在我返回时停止计时器,并在我再次访问第二个视图时重新开始绘图。

viewdidLoadinitWithFrame: 方法在子类中不起作用。

【问题讨论】:

  • UIViews 甚至没有 viewDidLoad 方法,只有 UIViewControllers。 viewWillAppear 和 viewWillDisappear 呢?我的意思是当你显示其他视图时,你可以在那里停止计时器。
  • 没有viewWillAppear和viewWillDisappear
  • “它”属于哪一类?
  • 它是一个Objective C 类,它是UIView 的子类。默认情况下,initWithFrame 方法与 drawRect 一起存在,但从未被调用。

标签: iphone objective-c drawrect


【解决方案1】:

awakeFromNibviewdidLoadinitWithFrame都是在对象初始化阶段调用的。如果对象已经创建,则不会再次调用这些方法。您可以使用视图的setNeedsDisplay 方法强制视图自行绘制。

【讨论】:

  • 那么当我回到我的第一个视图时如何停止计时器并在我再次进入视图时再次从头开始触发它?
  • 您创建计时器,将其保留为控制器类(可能是 UIViewController)中的实例变量。当您切换视图时会使您的计时器失效,然后在必要时重新启动它。
  • 好的...但我无法再次启动它,因为我第一次使用 awakeFromNib 使用计时器。我什至不能调用类中的方法(使用 drawRect 方法),它是另一个类的 UIview 的子类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多