سؤال

لدي العديد من nscomboboxes التي تم إنشاؤها في Builder واجهة ، وواحد تم إنشاؤه برمجيًا.

NSComboboxes التي تم إنشاؤها في Builder Interface مثالية. لديّ قيمتها مرتبطة بوحدة التحكم الافتراضية للمستخدم المشترك ، وعندما يتم فتح عرضهم ، فإنهم يجلسون هناك مع القيمة الصحيحة. الأهم من ذلك ، تظهر هذه القيمة كنص "طبيعي" في nscombobox. بمعنى آخر ، لا تظهر القيمة المحددة. هذا ما أريد.

بالنسبة إلى NSCombobox الذي يتم إنشاؤه برمجيًا ، قمت بتعيين القيمة باستخدام SelectItemAtIndex: 0. عندما أفعل ذلك ، يتم تحديد العنصر الصحيح-لكن النص يبدو المحدد. أي ، يتم تسليط الضوء عليها وكل شيء. لا أريد هذا. فيما يلي الحلول التي حاولت:

(ط) احصل على محرر الحقل وقم بتعيين نقطة الإدراج إلى نهاية النص. هذا لا يعمل ، على الرغم من أنه من الغريب أن سلسلة محرر الحقل إما لا شيء أو فارغ عند القيام بذلك. لست متأكدًا مما إذا كان هذا سلوكًا صحيحًا لمحرر الحقل.

(2) تجربة طرق أخرى مختلفة لتعيين قيمة مربع التحرير والسرد ، مثل setObjectValue ، TakestringValueFrom ، إلخ.

(3) أخيرًا ، وأكثرها إحباطًا ، حاولت ضبط قيمة nscombobox باستخدام [myCombobox setValue:@"العنصر الافتراضي" forKey:@"value"] ؛ هذا فشل مع OBJC_EXCEPTION_THROW ، ويفترض أنه لا يوجد مفتاح KVC هذا. لكنني أعلم أنه يمكن تعيين قيمة مربع التحرير والسرد بواسطة KVO ، لأنه يعمل في Builder واجهة! أظن أنني لا أعرف مسار المفتاح الصحيح. حاولت تعداد جميع الخصائص باستخدام الاستبطان ، لكن لا يمكنني تشغيل الكود بشكل صحيح (OBJC_Property_T ليس في الرؤوس المتوقعة).

لذلك ، لدي سؤالان:

أولاً ، هل يعرف أي شخص كيفية تعيين قيمة افتراضية لـ NSCombobox برمجيًا ، بحيث لم يتم تحديد النص في المربع؟ سأذهب إلى أي أطوال للقيام بذلك ، بما في ذلك الفئة الفرعية الجديدة لـ NSComboboxCell ، إذا كان الأمر يتعلق بذلك.

ثانياً ، هل يمكن لأي شخص أن يخبرني ما هو المفتاح أو المسار الرئيسي الذي يستخدمه IB لتعيين قيمة nscombobox؟ أو بدلاً من ذلك ، لماذا تفشل جهودي للقيام بذلك؟

لقد كنت أعمل على هذا لعدة ساعات الآن وأنا متشفرة حقًا!


شكرا لك ، mustisignup! من الجيد جدًا أن يكون هذا ثابتًا. القليل من المتابعة:

(ط) اختيار النص هو بالتأكيد بسبب التركيز. استدعاء setRefusesFirStreSponder: نعم إصلاح المشكلة. لسوء الحظ ، تريد النافذة حقًا التركيز على مربع التحرير والسرد هذا ، حيث أن الإعداد REFUSESFIRSTRESPORTED يعود إلى لا (لاحقًا ، بعد بدء النافذة) يؤدي إلى اختيار النص مرة أخرى (أريد أن يتمكن المستخدم من التركيز على هذا المربع إذا كان يرغب). لذلك ، في حالتي ، كان الحل النهائي هو استدعاء [Window MakefirStsponder: OtherControl]. من الغريب أنه على الرغم من أن [Window Makefirstresponder: nil] لا يعمل. أي أفكار لماذا؟

(2) شكرًا على الإشارة إلى الفرق بين الروابط والخصائص. لقد تعلمت الكثير أثناء النظر في هذا السؤال. لأحدهم ، علمت أنه يمكنك الحصول على قائمة بالروابط عن طريق الاتصال - (nsarray *) ExposedBindings ، والتي بالنسبة إلى Nscombobox التي تعود (fontsize ، المحاذاة ، تلميح الأدوات ، fontname ، تمكين ، المحتوى ، fontfamilynam ، المحتوى ، قابل للتحرير ، fontbold). ثانياً ، تمكنت من تعيين القيمة باستخدام [myCombobox bind:@"value" toobject: [nsmutablestring stringWithString:@"defaultValue"] withkeypath:@"string" الخيارات: لا شيء] ، حيث يحتوي nsmutablestring على فئة على المنعطفات " سلسلة "في خاصية. أخيرًا ، هذا في الواقع لا يحدد اختيار النص "مشكلة". يجب أن يكون الفرق بين اختيار النص مع مربع التحرير والسرد هذا في Builder الواجهة هو موقفهم في النافذة ... أعتقد أن مربع التحرير والسرد هذا من المقرر أن يصبح inialfirstresponder في حين لم يكن الآخرون.

لذلك قد يكون سؤالي الوحيد المتبقي هو السبب في أن [Window MakefirStresponder: nil] لا يعمل على التركيز على مربع التحرير والسرد. ليس مهمًا للغاية ، لكنني سأكون فضوليًا إذا كان لدى أي شخص فكرة.

هل كانت مفيدة؟

المحلول

أولاً ، أعتقد أن النص محدد بسبب الاتصال selectItemAtIndex: جعل combobox the firstresponder. يمكنك استخدام setRefusesFirstResponder:YES أو يمكنك جعل عنصر آخر أول مستجيب لجعل النص غير محدد.

إذا فهمت بشكل صحيح وتريد تغيير اختيار combobox ، فأنت تفعل ذلك بالطريقة الصحيحة.

ثانياً ، أنت مربكة الارتباطات و KVC. nscombobox لديه ربط تسمى "القيمة" ، وليس أ منشأه تسمى "القيمة". لا معنى لها محاولة ضبطها setValue:forKey:, ، وباني الواجهة بالتأكيد لا يفعل هذا.

ستكون على صواب في التفكير في أن هذا غير ضروري ومربك وربما كان يمكن اختيار أسماء أفضل للربط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top