
我遇到的问题是,如果我在视图的initWithCoder方法中为控件添加初始化代码,并且在视图的awakeFromNib中绑定,则绑定不会被连接起来.如果我将我的控件的初始化放在awakeFromNib中,当单击该按钮时,我无法访问视图中的控件(使用NSLog打印时它们为null).
从我可以告诉它看起来问题可能是NSCollectionVIEw的工作方式是,它创建了一个视图实例,然后复制它以了解集合视图中的每个对象的方式.如何获取初始化按钮和绑定以使用原型的副本?
下面是我的初始化代码和我在子类视图的awakeFromNib中的绑定:
SubVIEw.h
@interface SubVIEw : NSVIEw { NSbutton *button; NSTextFIEld *textFIEld; IBOutlet NSCollectionVIEwItem *item; // Connected in IB to my NSCollectionVIEwItem}- (IBAction)buttonClicked:(ID)sender;@end SubVIEw.m
@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,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 希望这是一个接近你需要的地方……
总结以上是内存溢出为你收集整理的objective-c – 如何在我的NSCollectionView的视图子类中以编程方式绑定?全部内容,希望文章能够帮你解决objective-c – 如何在我的NSCollectionView的视图子类中以编程方式绑定?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)