تغيير حجم nstokenfield بعد ملء الرموز الرموز
-
03-10-2019 - |
سؤال
أنا أستخدم nstokenfield كوسيلة للمستخدمين لإدخال العلامات. كل شيء يعمل بشكل جيد ويتأرجح مع Coredata إدارة العلامات على حد سواء عندما يضيف المستخدم أو يحذف علامة.
لقد أضفت مؤخرًا المنطق حتى يتم تغيير حجم Nstokenfield رأسي ifvertallyexpandingtextfield. مرة أخرى كل هذا يعمل بشكل جيد.
تكمن المشكلة في أنه عندما يتعين عليّ في البداية ملء Nstokenfield بعلامات ، أحتاج إلى تغيير حجمه. أقوم بملء الحقل بالاتصال:
[tagField setObjectValue: anArray];
حيث Anarray عبارة عن سلسلة من الكائنات التي تمثل علامة أو رمزًا. وهذا بدوره يدعو طريقة مندوب Nstokenfield
tokenField:displayStringForRepresentedObject:
الذي يعيد تمثيل السلسلة للكائن الذي تم تمريره في الصفيف السابق.
أحتاج إلى تغيير حجم Nstokenfield بعد جميع المكالمات إلى SireayStringForRepResatedObject. هل لدى أي شخص أي أفكار لإشعار أو طريقة لمعرفة أن كل شيء يتم؟ حتى وسيلة لاستدعاء الحجم بين كل مكالمة إلى SireStringForRepResatedObject من المحتمل أن تعمل.
شكرا مقدما.
المحلول
قد تجرب شيئًا مشابهًا لـ -setneedsdisplay: و- displayifneeded ... أي ، -setneedssizetofit: و -sizetofitifneeded.
ستحتاج فقط إلى علامة Bool "الاحتياجات" وطرق -setneedsizetofit: و -sizetofitifneeded.
بعد تعيين الرموز المميزة الخاصة بك ، call -setneedssizetofit: نعم. بدوره سيعين علامة "احتياجات" للمثال ، ثم إذا كانت العلم نعم ، فسيتصل [Self Performsext: elector (sizetofitifneeded) withObject: nil ayfdelay: 0]. ستتحقق طريقة SizeTofItIfneeded ما إذا كان علم احتياجاتك نعم ، اتصل [sizetofit] ، ثم قم بتعيين العلم على الاحتياجات إلى لا.
تحديث
هنا فئة كاملة (jlnautosizingTokenfield) هذا يفعل السيارات الأساسية كما هو موضح أعلاه. كان التعزيز الوحيد هو استدعاء هذا في طريقة المندوب المذكورة أعلاه:
- (NSString *)tokenField:(NSTokenField *)aTokenField
displayStringForRepresentedObject:(id)representedObject
{
[(JLNAutoSizingTokenField *)aTokenField setNeedsSizeToFit:YES];
return representedObject;
}