我已经成功地创建了一个NSCollectionView和添加标签的图样IB,开到一个酒店的我表示的对象。我现在想要通过程序创建一个NSButton和NSTextField与NSTextField开一个酒店的我表示的对象。当按钮被点击我想告诉和隐藏的NSTextField.

这个问题,我们遇到的是如果我把我的初始化时代为我控制的查看是initWithCoder方法,并结合在看的awakeFromNib,结合不上瘾了。如果我把初始化为我控制在awakeFromNib,当时的点击按钮,我没有访问控制在我看来(他们是空的时候打印出来,只使用).

从什么我可以告诉它看起来像该问题可能的方式NSCollectionView工作,它创建的一个实例来看,随后复制它怎么每许多对象是在收集图。我怎么得到的按钮来初始化和结合的工作与复制的原型?

下面是我的初始化时代码和我绑在awakeFromNib为我的子类观点:

子视图.h

@interface SubView : NSView {
    NSButton *button;
    NSTextField *textField;
    IBOutlet NSCollectionViewItem *item; // Connected in IB to my NSCollectionViewItem
}

- (IBAction)buttonClicked:(id)sender;

@end

子视图.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, 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
对于从原型NSCollectionViewItem复制的视图,不会调用

-awakeFromNib 。将绑定代码放在 initWithCoder:中,你应该没问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top