objective-c – 如何在我的NSCollectionView的视图子类中以编程方式绑定?

objective-c – 如何在我的NSCollectionView的视图子类中以编程方式绑定?,第1张

概述我已成功创建了一个NSCollectionView,并在IB中的视图原型中添加了一个标签,绑定到我所代表的对象的属性.我现在想以编程方式创建一个NSButton和NSTextField,其中NSTextField绑定到我表示的对象的属性.单击按钮时,我想显示并隐藏NSTextField. 我遇到的问题是,如果我在视图的initWithCoder方法中为控件添加初始化代码,并且在视图的awakeFr 我已成功创建了一个NSCollectionVIEw,并在IB中的视图原型中添加了一个标签,绑定到我所代表的对象的属性.我现在想以编程方式创建一个NSbutton和NSTextFIEld,其中NSTextFIEld绑定到我表示的对象的属性.单击按钮时,我想显示并隐藏NSTextFIEld.

我遇到的问题是,如果我在视图的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的视图子类中以编程方式绑定?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1007525.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存