سؤال

أنا أستخدم مجموعة أدوات الإدخال وأحاول وضع نافذة أسفل بعض النص.

_currentClient هو IMKTextInput مثال

المرشحين هو IMKCandidates مثال

// Get the current location to place the window
NSRect tempRect = NSMakeRect(0, 0, 0, 0);
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint* windowInsertionPoint = (NSPoint*)[clientData objectForKey:@"IMKBaseline"];
...
[candidates setCandidateFrameTopLeft:*windowInsertionPoint];
[candidates showCandidates];

الآن، أعلم أن windowInsertionPoint المتغير جيد، عندما أقوم بتصحيح الأخطاء أستطيع أن أرى قيمته، على سبيل المثال:نس بوينت:{647,365}

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

إذا قمت بتمرير قيم ثابتة عشوائية إلى setCandidateFrameTopLeft, ، يتم وضعه على الشاشة.الأعمال التالية:

[candidates setCandidateFrameTopLeft:NSMakePoint(401, 354)];

هل هي مشكلة المؤشر؟

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

المحلول

حسنًا، الحل لهذا هو أنني أحمق.إليك الكود الذي تحتاجه:

NSRect tempRect;
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint windowInsertionPoint = NSMakePoint(NSMinX(tempRect), NSMinY(tempRect));

الوثائق ل IMKTextInput attributesForCharacterIndex يقول

خط مستقيم:في المقابل، مستطيل يحيط بمستطيل بعرض بكسل واحد مع ارتفاع الخط.يتم توجيه هذا المستطيل بنفس الطريقة التي يتم بها توجيه الخط.

هذا يعني أنه يُرجع NSRect إلى المتغير الذي قمت بتمريره إليه lineHeightRectangle قيمة.النقطة المهمة هي أن موقع NSRect هو موقع الشخصية التي تبحث عنها.لذا، فأنت بحاجة فقط إلى تحديد نقطة من هذا المستطيل واستخدام NSMiNY للقيمة Y.يبلغ عرض المستطيل بكسل واحد فقط، لذا فإن Min/Max لـ X متماثلان بشكل أساسي.

نصائح أخرى

ربما لا تملك هذه المشكلة بعد الآن، ولكن هذا يعمل أيضا، للمستقبل: giveacodicetagpre.

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