8

私はしばらくこれを回避してきました..これは簡単な作業だと思いましたが、=Dではありません

私がやろうとしているのは、ユーザーがコンボボックスをクリックしたときにコンボボックスのリストを表示することですが、ボタンでは特に表示しません。

何か案が?前もって感謝します!

4

7 に答える 7

9

この回答は質問のタイトルに適合しますが、質問自体には適合しません。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]; }
  }
}
于 2013-06-27T15:09:08.040 に答える
4
  1. trueNSComboBox のリストが展開されているかどうかを返します

    comboBox.cell?.isAccessibilityExpanded() ?? false
    
  2. NSComboBoxのリストを開く

    comboBox.cell?.setAccessibilityExpanded(true)
    
  3. NSComboBox のリストを閉じます

    comboBox.cell?.setAccessibilityExpanded(false)
    

参考文献 jmoodyの答え

于 2016-09-02T01:09:48.747 に答える
3

置く

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:"))
        }
}
于 2015-10-04T22:12:40.187 に答える
2

上記の 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)
    }

 }



}
于 2015-01-07T21:44:29.300 に答える
0

NSComboBox は、このように動作するようには設計されていません。ユーザーはコントロール内のテキストを編集したい場合があるため、選択肢が予期せずポップアップすることなくクリックできる必要があります。

NSComboBoxCell をサブクラス化し、この動作を変更する必要があります...しかし、標準的な方法で動作しない標準的な外観のコントロールが得られます。これを行うことに決めた場合は、オープン ソース バージョンのNSComboBoxCellを参照してください。興味深いメソッドは -popUpForComboBoxCell: とその仲間のようです。

于 2010-12-22T15:51:08.153 に答える