xcode – 如何从头编程创建NSCollectionView?

xcode – 如何从头编程创建NSCollectionView?,第1张

概述NSCollectionView仍然是我见过的Cocoa API中最神秘的部分之一。文档差,有许多移动部件,其中许多通常在Interface Builder中实现,使文档具有挑战性。 请提供示例代码以创建最简单的NSCollectionView的情况,显示文本字段或按钮,而不使用Xcode,其中每个文本字段或按钮具有不同的标题。假设一个新的Xcode项目与默认窗口IBOutlet。 对于此示例,无 NSCollectionVIEw仍然是我见过的Cocoa API中最神秘的部分之一。文档差,有许多移动部件,其中许多通常在Interface Builder中实现,使文档具有挑战性。

请提供示例代码以创建最简单的NSCollectionVIEw的情况,显示文本字段或按钮,而不使用Xcode,其中每个文本字段或按钮具有不同的标题。假设一个新的Xcode项目与默认窗口IBOutlet。

对于此示例,无需绑定即可在数据源更改时更新NSCollectionVIEw。只需显示原型对象的网格,并将每个对象的标题设置为某个值。

如果我们可以得到一个很好的例子,如何做这个可用的许多人,我认为这将帮助所有使用NSCollectionVIEws的人,是像我一样的困惑。

请求摘要

>提供示例代码以在新的Xcode项目中呈现NSCollectionVIEw
>不要使用Interface Builder,请使用IBOutlet提供的默认窗口
> NSCollectionVIEw应该包含文本字段或按钮,您的选择
>视图中的每个项目都应该有不同的标题
>不需要绑定

如果有符合这些要求的示例代码,请提供一个链接,这将是巨大的!

谢谢!

解决方法 我不知道有很多洞察力创建集合视图程序化和没有绑定,但在这里它。

介绍

使用集合视图时,基本上有四个组件:

> VIEw:NSVIEw的子类,负责显示信息;
>集合视图本身;
> VIEw controller:NSCollectionVIEwItem的子类,用作集合视图项原型;
>模型:对象数组。

通常在Interface Builder中设计一个视图,一个模型由Cocoa绑定来实现。

编程方式:

常量

static const NSSize buttonSize = {80,20};static const NSSize itemSize = {100,40};static const NSPoint buttonOrigin = {10,10};

视图

这是一个包含按钮的标准视图(Interface Builder中的自定义视图)。请注意,视图具有固定大小。

@interface BVVIEw : NSVIEw@property (weak) NSbutton *button;@end@implementation BVVIEw@synthesize button;- (ID)initWithFrame:(NSRect)frameRect {    self = [super initWithFrame:(NSRect){frameRect.origin,itemSize}];    if (self) {        NSbutton *newbutton = [[NSbutton alloc]             initWithFrame:(NSRect){buttonOrigin,buttonSize}];        [self addSubvIEw:newbutton];        self.button = newbutton;    }    return self;}@end

视图控制器(原型)

通常,视图控制器从nib文件加载其视图。在极少数情况下,视图控制器不从nib文件获取其视图,开发人员必须在视图控制器接收到-vIEw之前发送-setVIEw:或覆盖-loadVIEw。下面的代码是后者。

视图控制器通过-setRepresentedobject接收相应的模型对象。我已经覆盖它,以便更新按钮标题时,模型对象更改。注意,这可以通过使用Cocoa绑定完全没有任何代码。

请注意,这些代码都不是特定于集合视图的 – 这是一般的视图控制器行为。

@interface BVPrototype : NSCollectionVIEwItem@end@implementation BVPrototype- (voID)loadVIEw {    [self setVIEw:[[BVVIEw alloc] initWithFrame:NSZeroRect]];}- (voID)setRepresentedobject:(ID)representedobject {    [super setRepresentedobject:representedobject];    [[(BVVIEw *)[self vIEw] button] setTitle:representedobject];}@end

模型

一个简单的表示按钮标题的字符串数组:

@property (strong) NSArray *Titles;self.Titles = [NSArray arrayWithObjects:@"Case",@"Molly",@"Armitage",@"HIDeo",@"The Finn",@"Maelcum",@"Wintermute",@"Neuromancer",nil];

集合视图

到目前为止,唯一建立的关系是项目原型(BVPrototype)使用的视图(BVVIEw)。必须通知收集视图应使用的原型以及从中获取数据的模型。

NSCollectionVIEw *cv = [[NSCollectionVIEw alloc]    initWithFrame:[[[self window] contentVIEw] frame]]; [cv setItemPrototype:[BVPrototype new]];[cv setContent:[self Titles]];

应用程序代理的完整源代码

#import "BVAppDelegate.h"static const NSSize buttonSize = { 80,20 };static const NSSize itemSize = { 100,40 };static const NSPoint buttonOrigin = { 10,10 };@interface BVVIEw : NSVIEw@property (weak) NSbutton *button;@end@implementation BVVIEw@synthesize button;- (ID)initWithFrame:(NSRect)frameRect {    self = [super initWithFrame:(NSRect){frameRect.origin,itemSize}];    if (self) {        NSbutton *newbutton = [[NSbutton alloc]            initWithFrame:(NSRect){buttonOrigin,buttonSize}];        [self addSubvIEw:newbutton];        self.button = newbutton;    }    return self;}@end@interface BVPrototype : NSCollectionVIEwItem@end@implementation BVPrototype- (voID)loadVIEw {    [self setVIEw:[[BVVIEw alloc] initWithFrame:NSZeroRect]];}- (voID)setRepresentedobject:(ID)representedobject {    [super setRepresentedobject:representedobject];    [[(BVVIEw *)[self vIEw] button] setTitle:representedobject];}@end@interface BVAppDelegate ()@property (strong) NSArray *Titles;@end@implementation BVAppDelegate@synthesize window = _window;@synthesize Titles;- (voID)applicationDIDFinishLaunching:(NSNotification *)aNotification {    self.Titles = [NSArray arrayWithObjects:@"Case",nil];    NSCollectionVIEw *cv = [[NSCollectionVIEw alloc]        initWithFrame:[[[self window] contentVIEw] frame]];     [cv setItemPrototype:[BVPrototype new]];    [cv setContent:[self Titles]];    [cv setautoresizingMask:(NSVIEwMinXmargin                             | NSVIEwWIDthSizable                             | NSVIEwMaxXmargin                             | NSVIEwMinYmargin                             | NSVIEwHeightSizable                             | NSVIEwMaxYmargin)];    [[[self window] contentVIEw] addSubvIEw:cv];}@end
总结

以上是内存溢出为你收集整理的xcode – 如何从头编程创建NSCollectionView?全部内容,希望文章能够帮你解决xcode – 如何从头编程创建NSCollectionView?所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1042560.html

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

发表评论

登录后才能评论

评论列表(0条)

保存