問題タブ [appkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - バインディングとターゲット/アクション?
現在、NSUserDefaults に保存される色を追跡するカラー ウェルがあります。NSUserDefaultsController にバインドされています。ただし、それに応じてビューを更新できるように、色の変更もリッスンしたいと考えています。そのため、バインディングに加えて、色で通知を送信する設定コントローラーに、色のウェルへのターゲット/アクションを追加しました。
1) ターゲット/アクションとバインディングの両方を持つことはどのくらい安全ですか? 遅れたり、同期がずれて異なる値を報告したりする可能性はありますか?
2) IBAction メソッドで色を取得する場合、ユーザーのデフォルトまたはカラー ウェルから取得する必要がありますか?
これが私の colorChanged: アクションです:
だから私はこれを行う必要があります:
また:
ありがとう!
cocoa - カスタム NSPopUpButtonCell drawImage:withFrame:inView が呼び出されない
カスタム NSPopUpButtonCell があり、drawImage:withFrame:inView をオーバーライドしようとしています。奇妙なことに、drawImage メソッドが呼び出されることはありませんが、画像は画面に表示されます。私は何が欠けていますか?
セルが正しくインストールされていることを確認しました - drawWithFrame:inView:controlView メッセージが表示されます。
画像のみを補正しようとしていることに注意してください。グラデーション スタイルのボタンが適切に画像の中央に配置されていません (本来あるべき場所の左に 1 ピクセルです)。
objective-c - 開いているパネルが表示され、すぐに消えます
私はこのコードを使用しています:
これは、メソッド内の唯一のコードです。メソッドが呼び出されると、開いているパネルが画面に 1 秒間表示されてから消えます。これを防ぐにはどうすればよいですか?
ありがとう。
cocoa - Cocoa アプリのメイン メニューの NSMenu (ネストされたサブメニュー) の強制更新
- メインメニューのウィンドウアイテムサブメニューとしていくつかのサブメニューを挿入しました
- NSObject から継承されたオブジェクトのインスタンス (クラス名は MenuController と仮定しましょう) があり、NSMenuDelegate メソッドから 2 つをサポートしています。 – numberOfItemsInMenu: – menu:updateItem:atIndex:shouldCancel:
- このインスタンスは、実行時に起動するために Blue-Object として NIB に追加されました
- サブメニューのデリゲートとして構成された手順 2 ~ 3 のオブジェクト (手順 1)
これで、実行時にサブメニュー コンテンツを提供できるようになりました。
次に、次のことを行います。プロトコルとデリゲートを介して実際のサブメニューにマップされた配列 (メニュー タイトルを含む MenuController 内) に新しい項目を追加したり、古い項目を削除したりできます。すべて正常に動作します。ただし、動的なメニュー項目にショートカットを割り当てるのが好きです。CMD-1、CMD-2、CMD-3など
ウィンドウ / MySubmenu / MyItem1 CMD-1、MyItem2 CMD-2、...
したがって、いくつかのアイテムを呼び出すには、Window / MySubmenu / MyItem に移動してマウスでクリックしたくないので、CMD-3 などのショートカットを 1 つだけ押してアイテムを呼び出します。
わかりました、定期的に期待どおりに動作します。しかし、通常、ネストされたサブメニューの変更についてメイン メニューに通知する方法はありません。問題を再現するための 1 つの安定した方法 - 削除済みの代わりに新しいアイテムを作成した後、いくつかのアイテムを削除して、それに割り当てられた古いショートカットを押してみてください - ビンゴ - 現在のサブメニュー コンテンツを表示するために Window / MySubmenu に移動する前にショートカットが機能しません.
メインメニューにサブメニューを強制的に再構築する方法がわかりません...私は試しました: [[NSApp mainMenu] update] と、NSMenuDidAddItemNotification、NSMenuDidRemoveItemNotification、NSMenuDidChangeItemNotification を送信するために NSNotificationCenter を使用したゲーム
サブメニューへのアウトレットを試み、メソッドを明示的に更新するようにしました-方法はありません... AppKitがデリゲートメソッドを呼び出す場合があります-そして、何も呼び出したくない場合もあります。ランダムな戦略のように見えます。
「何らかの呼び出し」の後、サブメニューが内部配列の変更後に実際の状態になることを確認するにはどうすればよいですか?
objective-c - nil を対象としたアクションとイベントのレスポンダー チェーン
イベント (つまり、-keyDown: と -keyUp:) は、nil をターゲットとするアクションと同じレスポンダー チェーンに従いますか?
ありがとう。
objective-c - BOOL を使用した NSMenuItem の値バインディング
NSMenuItem の「値」バインディングを BOOL にバインドする際に問題が発生しています。
私はこれに問題を単純化しました:
1) メニュー項目は、BOOL の値を変更するアクション メソッドを呼び出す必要があります。そうしないと機能しません (つまり、NSButton が BOOL の値を変更するメソッドを呼び出した場合、メニュー項目は更新されません)。
2) アクション メソッドが BOOL を定数 (つまりenabled = YES
) にしていても、メニュー項目の「値」は変わります。
何か案は?私は困惑している!
コードは次のとおりです。
MenuBindings_AppDelegate.h
Menu_BindingsAppDelegate.m
私の nib には、-makeYes: アクションに接続されたボタンと、-toggle: アクションに接続されたメニュー項目があります。メニュー項目の「値」バインディングは、アプリ デリゲートの「foo」属性にバインドされます。
ありがとう。
cocoa - 固定幅で NSAttributedString の高さを取得する方法
固定幅のボックスで NSAttributedStrings の描画を行いたいのですが、描画時に使用される適切な高さを計算するのに問題があります。これまでのところ、私は試しました:
を呼び出し
- (NSSize) size
ますが、文字列が望む幅を与えるため、結果は(この目的では)役に立ちません。図面で使用しているのとまったく同じように、
- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options
必要な幅とオプションで形作られた四角形で呼び出します。NSStringDrawingUsesLineFragmentOrigin
結果は...わかりにくいです。確かに私が探しているものではありません。(このCocoa-Dev スレッドを含む多くの場所で指摘されているように)。一時的な NSTextView の作成と実行: tmpView のフレームを照会すると、幅は希望どおりであり、高さは多くの場合正しいです...長い文字列になるまで、必要なサイズの半分になることがよくあります。(ヒットする最大サイズはないようです。1 つのフレームは高さが 273.0 (約 300 では短すぎます)、もう 1 つのフレームは 478.0 (わずか 60 程度では短すぎます) になります)。
[[tmpView textStorage] setAttributedString:aString];
[tmpView setHorizontallyResizable:NO];
[tmpView sizeToFit];
他の誰かがこれを管理している場合は、ポインタをいただければ幸いです。
objective-c - NSTextViewのコンテンツをリレーアウトして、タブ文字が4文字の幅で描画されるようにする方法
NSTextViewを使用していますが、要件の1つは、タブ文字'\t'の幅が4つのスペースと同じである必要があることです。
したがって、テキストコンテンツは次のようになります。
そして、これは私がこれを達成する方法です:
これにより、適切なレイアウトを最初のテキストとともに表示できるだけでなく、入力属性を同じに保つことができます。
問題は、エンドユーザーがフォントを変更できることです。その場合、サンプルテキストの位置がずれます。以下のように:
myTextViewのsetNeedsDisplay:YESを呼び出してみましたが、これは、avoidAdditionalLayoutパラメーターにNOを指定してNSTextViewのsetNeedsDisplayInRect:avoidAdditionalLayoutを呼び出すことになります。これは何も変わりませんでした。
myTextViewに新しいmyFontが設定されているときに、updateMyTextViewTextAttributes呼び出しを呼び出してみました。それは物事を変えません。
また、myTextViewのlayoutManagerに、myTextViewのtextContainerのLayoutForTextContainerを確保するように指示してみました。変化なし。
この時点で、次に何を試すべきかわかりません。助言がありますか?
python - Python の AppKit と ObjectiveC のデリゲート
AppKit を使用すると、Mac 上の Python プログラムで ObjectiveC クラスを使用できます。私は ObjectiveC にあまり詳しくありませんが、オーディオ プレーヤーを作成するために、AppKit を使用してNSSoundクラスにアクセスしたいと考えています。
プレーヤーは、現在のオーディオの再生が終了したときに、プレイリストから次のアイテムをロードするなどのアクションを実行する必要があります。その時に呼ばれるsound:didFinishPlaying:というメソッドがあるのかな。ドキュメントによると、このメソッド呼び出しを受け取るデリゲートを設定する必要があります。
誰かがそれを Python/AppKit に翻訳するのを手伝ってくれませんか? Python でデリゲートを実装し、didFinishPlaying 通知を受け取るにはどうすればよいですか?
cocoa - NSSegmented Control Not Selecting
I have an NSSegmentedControl with the textured rounded style, and with the selection mode set to 'any'. The problem is that it is treating it like select none. When I switch the style to capsule, it works correctly. I am using this in a toolbar, although I have tested this in a view (on two different computers) as well and it behaves the same way.
Thanks for the help