0

我创建了一个基本应用程序,创建了一个子类 NSView,并将其添加为界面生成器中的自定义视图。一切正常。

但是某些事情不能正常工作,这让我想知道我的 NSView 是否正确子类化?具体来说,当使用 NSProgressIndicator 时,我可以在不确定的情况下使用 startAnimating: 和 stopAnimating,但是如果我尝试对使用 incrementBy 的确定做任何事情,它什么也不做。

即使我将确定的 NSProgressIndicator 的默认值设置为 50.0,它也会在应用程序以 0.0 启动时出现,尽管在 IB 中看起来不错。

我的 NSProgressIndicator 已正确连接为 IBOutlet,我可以告诉它隐藏等,但根本无法让它动画化。但是,我还有其他问题让我认为这个问题实际上是我的 NSView 子类(例如 Quick Look 未触发)。

在我的子类中,我只是重写了 initWithFrame: 和 drawRect 方法,调用它们的 [super]。正如我所说,然后我将其作为自定义视图放置在界面构建器中并将其更改为 MyCustomView。大部分工作正常...?

我是否错误地将其子类化,或者没有在界面构建器中正确执行某些操作?我似乎错过了一些小东西?!

4

2 回答 2

1

Solved it.

I was initially doing the following in my awakeFromNib method:

- (void)awakeFromNib{
    [super awakeFromNib];
}

Turns out, awakeFromNib should not call super if it's directly under an NSView. Removing super fixed the issue.

- (void)awakeFromNib{
}
于 2011-01-12T12:50:28.843 回答
0

您需要覆盖 initWithFrame:,而不是 init。这大概就是问题所在。

进度指示器要注意的另一件事是:如果您正在做大量工作,您可能希望将其延迟到下一次运行循环迭代以让进度指示器刷新。使用延迟执行 (performSelector:withObject:afterDelay:) 或类似的东西来允许 UI 更新。

于 2011-01-12T11:10:03.910 回答