أفضل طريقة للقبض على الأحداث الرئيسية في NSTextView?

StackOverflow https://stackoverflow.com/questions/11291

  •  08-06-2019
  •  | 
  •  

سؤال

أنا ببطء التعلم الهدف-C و الكاكاو و الطريقة الوحيدة أرى حتى الآن لالتقاط الأحداث الرئيسية في النص الآراء هو استخدام وفد ولكن أواجه صعوبة في العثور على وثائق مفيدة و الأمثلة على كيفية تطبيق هذا الحل.يمكن لأي شخص أن لي نقطة في الاتجاه الصحيح أو توريد بعض أول يد المساعدة ؟

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

المحلول

عموما طريقة تنفيذ ذلك ببساطة لإضافة الوظيفة المطلوبة إلى عرض تحكم ، وتعيين مندوب.على سبيل المثال, إذا كنت تريد كود لتشغيل عندما عرض الأحمال ، مندوب فقط طريقة العرض الخاصة بك إلى جهاز تحكم, وتنفيذ awakeFromNib وظيفة.

لذا للكشف عن الضغط على مفتاح في النص ، تأكد من أن وحدة تحكم النص عرض مندوب ، ومن ثم تنفيذ هذه:

- (void)keyUp:(NSEvent *)theEvent

لاحظ أن هذا هو الموروثة NSResponder الأسلوب لا NSTextView الأسلوب.

نصائح أخرى

مجرد نصيحة من أجل تسليط الضوء على بناء الجملة:

لا تسليط الضوء على النص كله في مرة واحدة - انها جدا بطيئة.أيضا لا تسليط الضوء على آخر تحرير النص باستخدام -editedRange - انها بطيئة جدا جدا إذا كان المستخدم المعاجين مجموعة كبيرة من النص في عرض النص.

بدلا من ذلك تحتاج إلى تسليط الضوء على النص المرئي الذي يتم مثل هذا:

NSRect visibleRect = [[[textView enclosingScrollView] contentView] documentVisibleRect];
NSRange visibleRange = [[textView layoutManager] glyphRangeForBoundingRect:visibleRect inTextContainer:[textView textContainer]];

ثم يمكنك إطعام visibleRange إلى تسليط الضوء على رمز.

من المهم أن يقول لنا ما كنت حقا تسعى إلى تحقيق أعلى مستوى الهدف الذي تعتقد التقاط الأحداث الرئيسية في NSTextView سوف تعالج.

على سبيل المثال, عندما يسألني شخص عن كيفية التقاط الأحداث الرئيسية في NSTextالمجال ما كانوا يريدون حقا أن تعرف كيفية التحقق من صحة الإدخال في الحقل.أن يتم ذلك عن طريق وضع حقل المنسق مثيل NSFormatter (سواء كانت واحدة من formatters المدرجة في الكاكاو أو مخصص) ، وليس عن طريق معالجة ضغطات المفاتيح مباشرة.

لأن سبيل المثال ، ما كنت حقا محاولة تحقيقه ؟

لقد فعلت بعض الحفر و لم أجد إجابة على سؤالي.سوف تحصل في ذلك أدناه ، ولكن بفضل أولاد اثنين من أجاب.أعتقد أن تجاوز سعة المكدس هو موقع رائع بالفعل أتمنى المزيد من ماك المطورين تجد طريقها في فور انتهاء بيتا--وهذا يمكن أن تكون مصدرا كبيرا مطورين آخرين يتطلعون إلى الانتقال إلى منصة.

لذلك ، لم ، كما اقترح داني تجد جوابي في الوفد.ما لم نفهم من داني بعد أن هناك مجموعة من مندوب تمكين أساليب في تفويض كائن ، و أن المندوب يجب تنفيذ قال المناسبات.و ذلك لمدة TextView, كنت قادرا على العثور على طريقة textDidChange التي أنجزت ما أردت في طريقة أفضل من مجرد التقاط الضغط على مفتاح قد فعلت.حتى إذا كنت تنفيذ هذه في بلدي تحكم:

- (void)textDidChange:(NSNotification *)aNotification;

يمكنني الرد على النص الذي يتم تحريره.هناك بالطبع طرق أخرى متاحة و انا متحمس للعب معهم لأنني أعلم أنني سوف تتعلم الكثير كما أفعل أنا.شكرا مرة أخرى يا شباب

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