質問

インターフェイスビルダーにいくつかのNSCOMBOBOXが作成されており、1つはプログラムで作成されています。

インターフェイスビルダーで作成されたnscomboboxesは完璧です。共有ユーザーのデフォルトコントローラーにそれらの値が縛られており、彼らのビューが開かれたとき、彼らは正しい値でそこに座っています。重要なことに、この値はnscomboboxの「通常の」テキストとして表示されます。言い換えれば、値は選択されていません。これが私が欲しいものです。

プログラムで作成されたnscomboboxの場合、selectiTematindex:0を使用して値を設定します。私がこれを行うとき、正しいアイテムが選択されます - しかしテキスト 表示されます 選択しました。つまり、それは強調されています。私はこれを望んでいません。これが私が試みた回避策です:

(i)フィールドエディターを取得し、テキストの最後まで挿入ポイントを設定します。これはうまくいきませんが、奇妙なことに、これを行うときにフィールドエディターの文字列はゼロまたは空のいずれかです。これがフィールドエディターにとって正しい動作であるかどうかはわかりません。

(ii)setObjectValue、takestringvaluefromなど、コンボボックスの値を設定する他のさまざまな方法を試す。

(iii)最後に、そして最もイライラすることに、[mycombobox setValue:@"The Default Item" forkey:@"Value"]を使用してNSComboBoxの値を設定しようとしました。これは、おそらくそのようなKVCキーがないために、objc_exception_throwで失敗します。しかし、インターフェイスビルダーで動作するため、コンボボックスの価値はKVOによって設定できることを知っています!正しいキーパスがわからないと思います。内省を使用してすべてのプロパティを列挙しようとしましたが、コードを正しく動作させることはできません(objc_property_tは予想されるヘッダーではありません)。

だから、私には2つの質問があります:

まず、NSComboBoxのデフォルト値をプログラムで設定する方法を知っている人はいますか?それになると、新しいnscomboboxcellサブクラスなど、これを行うために任意の長さに行きます。

第二に、IBがNSComboBoxの値を設定するために使用しているキーまたはキーパスを誰かに教えてもらえますか?または、なぜこれを行うための私の努力が失敗しているのですか?

私はこれに何時間も取り組んできましたが、本当に不満を抱いています!


ありがとう、Mustisignup!これを修正できてとてもうれしいです。フォローアップの少し:

(i)テキストの選択は間違いなく焦点によって引き起こされます。 SetrefusesfirStresponderを呼び出す:はい問題を修正します。残念ながら、ウィンドウは本当にこのコンボボックスに集中したいと考えています。設定が拒否されないように設定されていないため(ウィンドウの開始後)、テキストの選択が再びテキストの選択を引き起こします(ユーザーが必要に応じてこのボックスに集中できるようにしたいです)。したがって、私の場合、決定的な解決策は[ウィンドウMakeFirStresponder:otherControl]を呼び出すことでした。奇妙なことに、[ウィンドウMakeFirStresponder:nil]は機能しません。何かアイデアはなぜですか?

(ii)バインディングとプロパティの違いを指摘してくれてありがとう。この質問を調べながら多くのことを学びました。 1つは、nscomboboxのリターン(fontsize、alignment、fontname、enabed、contentalues、fontfamilyname、font、hidden、fontitalic、textcolor、価値の呼び出し)を呼び出すことで、バインディングのリストを取得できることを学びました。 、コンテンツ、編集可能、fontbold)。第二に、[mycombobox bind:@"value" toobject:[nsmutablestring stringwithstring:@"defaultValue"]を使用して値を設定することができました。文字列 "プロパティに。最後に、これは実際にテキスト選択「問題」を修正しません。このコンボボックスを使用したテキスト選択とインターフェースビルダーの違いは、ウィンドウ内の位置でなければなりません...このコンボボックスは、他のものがそうではなかった間に初期障害者になる予定であると思います。

したがって、私の唯一の質問は、なぜ[ウィンドウMakeFirStresponder:nil]がコンボボックスから集中するために機能しない理由です。非常に重要ではありませんが、誰かがアイデアを持っている場合、私は興味があります。

役に立ちましたか?

解決

まず、電話をかけるためにテキストが選択されていると思います selectItemAtIndex: コンボボックスをFirStresponderにしました。使用できます setRefusesFirstResponder:YES または、テキストが選択されていないようにするために、別のアイテムを最初の応答者にすることもできます。

私が正しく理解していて、あなたがコンボボックスの選択を変更したい場合、あなたはそれを正しい方法で行っています。

第二に、あなたは混乱しているバインディングとKVCです。 nscomboboxには バインディング 「値」と呼ばれます 財産 「値」と呼ばれます。それを設定しようとすることは意味がありません setValue:forKey:, 、そしてインターフェイスビルダーは間違いなくこれをしていません。

あなたはこれが不快で混乱していると考えるのは正しいでしょう、そしておそらくより良い名前がバインディングのために選ばれたかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top