请提供示例代码以创建最简单的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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)