我创建了一个基本应用程序,创建了一个子类NSView,并在界面构建器中将其添加为自定义视图。一切正常。
然而某些事情无法正常工作,这让我想知道我的NSView是否正确地进行了子类化?具体来说,当使用NSProgressIndicator时,我可以使用startAnimating:和stopAnimating on indeterminate,但如果我尝试使用incrementBy执行任何操作,它什么也不做。
即使我将确定的NSProgressIndicator的默认值设置为50.0,它也会在应用程序以0.0开始时显示,尽管在IB中看起来很好。
我的NSProgressIndicator作为一个IBOutlet被正确连接,我可以告诉它隐藏等等,根本无法让它进行动画制作。但是,我还有其他问题让我觉得这个问题实际上是我的NSView子类(例如Quick Look没有触发)。
在我的子类中,我只是重写了initWithFrame:和drawRect方法,调用它们的[super]。正如我所说,我已经将它作为自定义视图放在界面构建器中并将其更改为MyCustomView。一切工作都很好......?
我是否正确地对此进行了子类化,或者没有正确地在界面构建器中执行某些操作?我好像错过了一些小事?!
答案 0 :(得分:1)
解决了它。
我最初在awakeFromNib方法中执行以下操作:
- (void)awakeFromNib{
[super awakeFromNib];
}
事实证明,如果awakeFromNib直接位于NSView下,则不应该调用super。删除超级修复问题。
- (void)awakeFromNib{
}
答案 1 :(得分:0)
您需要覆盖initWithFrame:,而不是init。这可能就是问题所在。
使用进度指示器时要注意另一件事:如果您正在做大量工作,您可能希望将其延迟到下一个运行循环迭代,以使进度指示器刷新。使用延迟执行(performSelector:withObject:afterDelay :)或类似的东西以允许UI更新。