私はしばらくこれを回避してきました..これは簡単な作業だと思いましたが、=Dではありません
私がやろうとしているのは、ユーザーがコンボボックスをクリックしたときにコンボボックスのリストを表示することですが、ボタンでは特に表示しません。
何か案が?前もって感謝します!
私はしばらくこれを回避してきました..これは簡単な作業だと思いましたが、=Dではありません
私がやろうとしているのは、ユーザーがコンボボックスをクリックしたときにコンボボックスのリストを表示することですが、ボタンでは特に表示しません。
何か案が?前もって感謝します!
この回答は質問のタイトルに適合しますが、質問自体には適合しません。Omer は、テキスト フィールドに触れてボックスをポップアップさせたいと考えていました。
このソリューションは、ユーザーがテキストを入力したときにポップアップを表示します。
Jens Alfkeの cocoabuilder でこの回答を見つけました。彼のコードをここに再投稿しました。ありがとうジェンス。
元のココアビルダーの投稿: (http://www.cocoabuilder.com/archive/cocoa)
@interface NSComboBox (MYExpansionAPI)
@property (getter=isExpanded) BOOL expanded;
@end
@implementation NSComboBox (MYExpansionAPI)
- (BOOL) isExpanded
{
id ax = NSAccessibilityUnignoredDescendant(self);
return [[ax accessibilityAttributeValue:
NSAccessibilityExpandedAttribute] boolValue];
}
- (void) setExpanded: (BOOL)expanded
{
id ax = NSAccessibilityUnignoredDescendant(self);
[ax accessibilitySetValue: [NSNumber numberWithBool: expanded]
forAttribute: NSAccessibilityExpandedAttribute];
}
メソッドでこのコードを使用しましたcontrolTextDidChange:
。
- (void) controlTextDidChange:(NSNotification *) aNotification {
NSTextField *textField = [aNotification object];
NSString *value = [textField stringValue];
NSComboBox *box = [self comboBox];
if (value == nil || [value length] == 0) {
if ([box isExpanded]) { [box setExpanded:NO]; }
} else {
if (![box isExpanded]) { [box setExpanded:YES]; }
}
}
true
NSComboBox のリストが展開されているかどうかを返します
comboBox.cell?.isAccessibilityExpanded() ?? false
NSComboBoxのリストを開く
comboBox.cell?.setAccessibilityExpanded(true)
NSComboBox のリストを閉じます
comboBox.cell?.setAccessibilityExpanded(false)
参考文献 jmoodyの答え。
置く
comboBoxCell.performSelector(Selector("popUp:"))
の中へ
override func controlTextDidChange(obj: NSNotification) {}
私が最終的に得たものです。ありがとう@Ahmed Lotfy
これが完全なコードです。OSX 10.11で動作します
override func controlTextDidChange(obj: NSNotification) {
if let comboBoxCell = self.comboBox.cell as? NSComboBoxCell {
comboBoxCell.performSelector(Selector("popUp:"))
}
}
上記の jmoody と Jens Alfke に感謝します。これは、上記のソリューションの SWIFT 翻訳です。
import Cocoa
class CComboBoxEx: NSComboBox
{
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
// Drawing code here.
}
func isExpanded() -> Bool{
if let ax:AnyObject? = NSAccessibilityUnignoredDescendant(self) {
if ax!.accessibilityAttributeValue(NSAccessibilityExpandedAttribute) != nil {
return true
}
}
return false
}
func setExpanded (bExpanded:Bool) {
if let ax:AnyObject? = NSAccessibilityUnignoredDescendant(self) {
ax!.accessibilitySetValue(NSNumber(bool: bExpanded), forAttribute: NSAccessibilityExpandedAttribute)
}
}
}
NSComboBox は、このように動作するようには設計されていません。ユーザーはコントロール内のテキストを編集したい場合があるため、選択肢が予期せずポップアップすることなくクリックできる必要があります。
NSComboBoxCell をサブクラス化し、この動作を変更する必要があります...しかし、標準的な方法で動作しない標準的な外観のコントロールが得られます。これを行うことに決めた場合は、オープン ソース バージョンのNSComboBoxCellを参照してください。興味深いメソッドは -popUpForComboBoxCell: とその仲間のようです。