كيف يمكنني ربط برمجيا في رأي فئة فرعية من NSCollectionView?
-
06-07-2019 - |
سؤال
لقد نجحت في خلق NSCollectionView و إضافة تسمية إلى عرض النموذج في IB, لا بد أن خاصية من تمثيل كائن.أريد الآن أن برمجيا إنشاء NSButton و NSTextField مع NSTextField لا بد أن خاصية من تمثيل كائن.عند النقر فوق الزر أريد أن إظهار وإخفاء NSTextField.
المشكلة جئت عبر هو لو وضعت رمز التهيئة أجل التحكم في عرض لاستخدام هذه الطريقة اضع + طريقة و الربط في الرأي awakeFromNib ، ملزمة لا تحصل على مدمن مخدرات.إذا وضعت التهيئة أجل التحكم في awakeFromNib ، عندما يتم النقر على زر, أنا لم يكن لديك الوصول إلى عناصر التحكم في وجهة نظري (وهي فارغة عند طباعتها باستخدام NSLog).
من ما أستطيع أن أقول أنه يبدو وكأنه قد تكون المشكلة أن الطريقة NSCollectionView يعمل هو, أنه يخلق مثيل من عرض ، ثم نسخ ذلك في كل العديد من الكائنات في جمع الرأي.كيف يمكنني الحصول على الأزرار إلى تهيئة ملزمة للعمل مع نسخ من النموذج ؟
أدناه هو رمز التهيئة و ملزمة في awakeFromNib لبلدي ثم subclassed عرض:
SubView.ح
@interface SubView : NSView {
NSButton *button;
NSTextField *textField;
IBOutlet NSCollectionViewItem *item; // Connected in IB to my NSCollectionViewItem
}
- (IBAction)buttonClicked:(id)sender;
@end
SubView.م
@implementation SubView
- (id)initWithCoder:(NSCoder *)decoder
{
id view = [super initWithCoder:decoder];
button = [[NSButton alloc] initWithFrame:NSMakeRect(50, 95, 100, 20)];
[button setTitle:@"Begin Editing"];
[button setTarget:self];
[button setAction:@selector(buttonClicked:)];
[self addSubview:button];
textField = [[NSTextField alloc] initWithFrame:NSMakeRect(10, 10, 100, 75)];
[self addSubview:textField];
return(view);
}
- (void)awakeFromNib
{
// Bind the textField to the representedObject's name property
[textField bind:@"value"
toObject:item
withKeyPath:@"representedObject.name"
options:nil];
}
- (IBAction)buttonClicked:(id)sender
{
[button setTitle:@"End Editing"];
[textField setHidden:YES];
}
@end
المحلول
وهذا يبدو مماثلا لشيء فعلته فقط، لذلك ربما يكون ما تحتاجه.
NSCollectionView و تجاوز:
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object
في newItemForRepresentedObject:
، إستعادة هذا البند الرأي، ثم إضافة عناصر التحكم الخاصة بك وأي ربط البرامج:
@implementation NSCollectionViewSubclass
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object {
// Allow the superclass to create or copy the collection view item
NSSCollectionViewItem *newItem = [super newItemForRepresentedObject:object];
// Get the new item's view so you can mess with it
NSView *itemView = [newItem view];
//
// add your controls to the view here, bind, etc
//
return newItem;
}
@end
ونأمل أن هذا هو في مكان ما بالقرب من المكان عليك أن تكون ...
نصائح أخرى
-awakeFromNib
لا يسمى على عرض عن NSCollectionViewItem إذا كان هذا الرأي هو في نفس بنك الاستثمار القومي كما NSCollectionView ، ولكن إذا وضعت رأي مستقل بنك الاستثمار القومي.
- خلق فارغة ملف بنك الاستثمار القومي (BlahBlahCollectionViewItem.بنك الاستثمار القومي).
- قطع المجموعة البند نظر من أي بنك الاستثمار القومي لديك في
- لصقه في ملف بنك الاستثمار القومي
- تغيير فئة من صاحبها إلى NSCollectionViewItem.
- الاتصال عرض المخرج عن مالك حديثا لصق عرض
- فتح بنك الاستثمار القومي الملف الذي يحتوي على NSViewController
- حدد المرتبطة NSViewControllerItem
- تغيير اسم بنك الاستثمار القومي الملكية إلى اسم جديد بنك الاستثمار القومي
- نضع الكود في
-awakeFromNib
لا يسمى -awakeFromNib
لوجهات النظر نسخ من النموذج NSCollectionViewItem. وضع مدونة سلوك ملزمة بك في initWithCoder:
، ويجب أن يكون على ما يرام.