【问题标题】:NSProgressIndicator woes - perhaps my NSView subclass?NSProgressIndicator 麻烦——也许是我的 NSView 子类?
【发布时间】:2011-01-12 10:07:39
【问题描述】:

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

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

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

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

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

我是否错误地继承了这个,或者没有在界面生成器中正确地做某事?我好像漏掉了什么小东西?!

【问题讨论】:

    标签: objective-c cocoa nsview nsprogressindicator


    【解决方案1】:

    解决了。

    我最初在我的 awakeFromNib 方法中执行以下操作:

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

    事实证明,如果 awakeFromNib 直接位于 NSView 下,则不应调用 super。删除 super 解决了这个问题。

    - (void)awakeFromNib{
    }
    

    【讨论】:

      【解决方案2】:

      您需要重写 initWithFrame:,而不是 init。这可能就是问题所在。

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

      【讨论】:

      • 谢谢,对不起,我正在做 initWithFrame... 可能是因为我正在通过 .xib 加载并且需要覆盖 awakeFromNib?
      猜你喜欢
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多