سؤال

أريد أن أضع عنصر تحكم مخصص داخل العرض الخاص بـ nscollectionViewItem.

دعنا نقول أن لدي NSView مخصص يسمى boxesview.boxesview هو مجرد طريقة عرض يرسم عدد محدد مسبقًا من الصناديق في عرضه. تم تعيين هذا العدد من الصناديق في طريقة init. دعنا نقول أنني وضعت عليه في 8.

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

إذا قمت بتعيين نقطة توقف في طريقة DrawRect of BoxesView ، فإنه يوضح أن عدد المربعات التي يمكن رسمها هو 0! إذا قمت بتعيين نقطة توقف في طريقة init الخاصة بي حيث قمت بتعيين Numboxes على 8 ، فإن ذلك يوضح أن Numboxes يتم تعيينه فعليًا إلى 8. أيضًا ، يتم استدعاء طريقة init فقط مرة واحدة على الرغم من وجود صفوف متعددة في عرض المجموعة.

ما الخطأ الذي افعله؟

تحديث

تمكنت من الحصول على هذا العمل عن طريق تعيين النمط العنصر لتحميل من XIB بدلاً من أن أكون في نفس XIB مثل NSCOLLECTIONVIEWITEM. هذا رائع ، إلا أنه يعمل فقط في 10.6 وليس 10.5.

تحديث 2

ما أحاول القيام به ، هو التمسك بعرضي المخصص داخل العرض الذي كان موجودًا بالفعل لـ nscollectionViewitem الموجود بالفعل. ما يحدث هو أن Mediable Mboxwidth يتم تفجيره وهو صفر ، لذلك عندما يذهب لرسمه ، لا يحدث شيء.

@implementation DumbView

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
       mBoxWidth = 3;
    }
    return self;
}

- (void)drawRect:(NSRect)dirtyRect {
   NSRect bounds = self.bounds;
   [[NSColor redColor]set];
   [NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)];
}

@نهاية

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

المحلول

لم أقم بتنفيذ initWithCoder. الذي يصلح كل شيء.

نصائح أخرى

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

أنت استطاع واصل كل المشاكل لإنشاء iblugin لعرضك المخصص (واحد يكشف عن ارتباط NumberBoxestodraw) ، ولكن هذا ألم في المؤخرة وهناك طريقة أسهل: الارتباطات اليدوية.

باستخدام الروابط اليدوية مع NSCOLLECTIONVIEW/البند

أولاً ، Subclcass nscollectionViewitem ، أخبر IB باستخدام هذه الفئة الفرعية الجديدة ، وتأكد من أن لديك منفذًا فيه (مثل BoxView) متصل بعرضك المخصص.

بعد ذلك ، الفئة الفرعية nscollectionview (تعيين IB لاستخدام هذه الفئة الفرعية) والتجاوز -النيويميفوريسورتوبورجيت:. في ذلك ، ستتصل أولاً بـ Super (تخزين النتيجة إلى متغير محلي) ، ثم ربط عدد مربعات "BoxView" يدويًا إلى الكائن الممثل مع مفتاح "numberofboxes" الذي تستخدمه في النموذج الخاص بك.

هل حاولت التحميل الزائد copywithzone؟

أظن أن العنصر الخاص بك يتم نسخه وليس مباشرة.

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