سؤال

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

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

هل يعرف أحد وسيلة لإنجاز ما أحتاج إليه؟

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

المحلول

أعتقد أن تركيزك على "الماوس" كحدث نهاية قد يكون ضيقا جدا. على سبيل المثال، ما يحدث عندما ينقر المستخدم ويقوم بتحديد النص باستخدام مفاتيح Shift-Arrow؟ ألا ينبغي أن يكون لديك برنامجك نفس التأثير في هذه الحالة؟

ما يبدو أن غير معروف يبدو مقترحا للجزء الماوس من المعادلة، لكنني قلق من أنه عندما يتغير التحديد من الماوس، قد لا تحصل أبدا على "تغيير اختيار" عندما يكون الماوس أعلى.

لذلك، ربما أستقلت هذه المشكلة مع تأخير NSTIMER نقي. في كل مرة تحصل فيها على "تم تغيير الاختيار" من عرض الويب، إعادة تعيين NSTIMER الخاص بك. عندما يصل إلى بعض الوقت المنقضي القصير، مثل 0.5 ثانية يقول، وضع و / أو نقل نافذتك.

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

نصائح أخرى

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

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