كيف لي أن أعرف عندما يتم إضافتها سمة التعلق بي NSTextView؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

ونظرا للدلالات معينة إرفاق ملفات NSTextView في طلبي، وأريد أن أعرف متى يتم إدراجها أو حذفها من تخزين النص الخاص بي.

وبلدي فئة فرعية من NSTextView تنفذ shouldChangeTextInRange: replacementString: طريقة، والذي يسمح لي أن أرى بسهولة عندما مرفق على وشك أن يتم استبدال (I يمكن البحث في تخزين النص في النطاق المحدد)

.

ولأن سلسلة الاستبدال هو مجرد NSString وليس NSAttributedString، ليس لدي أي طريقة لرؤية من هذه الطريقة ما إذا كان يتم إدراج مرفق. وثائق حتى يذهب إلى حد القول بأن السلسلة قد يكون صفرا إذا "فقط سمات" يتم تحريرها.

ولذا فإن السؤال هو، ما هي النقطة تجاوز أفضل لمعرفة متى يتم إدراج مرفق؟ أو ربما من المفيد على النحو التالي:؟ ما هو أفضل نقطة تجاوز لمعرفة متى يتم تعديل سمات

تحديث: قلت أعلاه لم يكن لدي أي وسيلة لمعرفة ما إذا كان يتم إدراج مرفق. لقد أشير لي أن أستطيع أن أقول أن "" مرفق يشارك، لأن سلسلة سيحتوي NSAttachmentCharacter السحر. ولكن أنا ليس لديها معلومات محددة حول المرفق إلا بعد تحرير كامل.

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

المحلول

وأود أن نلقي نظرة على NSTextStorage طريقة مندوب -textStorageDidProcessEditing :، التي ينبغي أن تسمى كل مرة يتم فيها تغيير على تخزين النص الأساسي. يمكنك بعد ذلك استخدام -editedRange، -editedMask، وأساليب -changeInLength لتحديد ما هي جزء من تخزين نص تم تغيير، والبحث في هذا النطاق لأي المرفقات التي قد تكون ذات فائدة لك.

نصائح أخرى

وقد ترغب في إلقاء نظرة على طرق مندوب اثنين NSTextStorage:

- (void)textStorageWillProcessEditing:(NSNotification *)notification;
/* Delegate can change the characters or attributes */

- (void)textStorageDidProcessEditing:(NSNotification *)notification;
/* Delegate can change the attributes */

وداخل textStorageWill/DidProcessEditing، يمكنك الاتصال -[NSTextStorage editedMask] و-[NSTextStorage editedRange] لمعرفة ما تغير ومن ثم اتخاذ الإجراءات اللازمة وفقا لذلك.

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