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

解決しました。

私は当初、awakeFromNib メソッドで次のことを行っていました。

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

NSView の直下にある場合、awakeFromNib は super を呼び出すべきではありません。スーパーを削除すると問題が修正されました。

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

init ではなく、initWithFrame: をオーバーライドする必要があります。それがおそらく問題です。

進行状況インジケーターで注意すべきもう 1 つの点: 大量の作業を行っている場合は、進行状況インジケーターを更新するために、次の実行ループ反復まで遅らせたい場合があります。遅延実行 (performSelector:withObject:afterDelay:) などを使用して、UI を更新できるようにします。

于 2011-01-12T11:10:03.910 に答える