objective-c – 选择突出显示在NSCollectionView中

objective-c – 选择突出显示在NSCollectionView中,第1张

概述我有一个工作NSCollectionView与一个次要,但关键,异常。获取和突出显示集合中的所选项目。 我已经在雪豹之前的所有这些工作,但一些似乎已经改变,我不能把我的手指,所以我把我的NSCollectionView回到一个基本的测试,并按照苹果的文档创建一个NSCollectionView在这里: http://developer.apple.com/mac/library/DOCUMENTA 我有一个工作NSCollectionVIEw与一个次要,但关键,异常。获取和突出显示集合中的所选项目。

我已经在雪豹之前的所有这些工作,但一些似乎已经改变,我不能把我的手指,所以我把我的NSCollectionVIEw回到一个基本的测试,并按照苹果的文档创建一个NSCollectionVIEw在这里:

http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/CollectionViews/Introduction/Introduction.html

快速入门指南后,集合视图工作正常。然而,本指南不讨论除“具有合并图像视图,将对象设置为可选择或不可选择和如果选择了改变颜色”等特征。

使用这个例子,我进入下一步使用控制器键selectionIndexes将数组控制器绑定到NSCollectionVIEw,认为这将绑定在NSCollectionVIEw和数组控制器之间的任何选择,从而触发KVO通知。我也设置NSCollectionVIEw在IB可选择。

似乎没有选择委托NSCollectionVIEw和大多数Cocoa UI视图不同,似乎没有默认选择高亮。

所以我的问题真的归结为一个相关的问题,但两个不同的问题。

>如何捕获项目的选择?
>如何显示项目的突出显示?

NSCollectionVIEw的编程指南似乎是很少和远在之间,通过谷歌的大多数搜索似乎拉起前的雪豹实现,或使用视图在一个单独的XIB文件。

对于后者(用于视图的单独的XIB文件),我不明白为什么这应该是一个先决条件,否则我怀疑苹果不会将视图包含在集合视图项目的同一个包中。

我知道这将是一个“看不见树木的树”的问题 – 所以我准备了“doh!时刻。

像往常一样,任何和所有的帮助非常赞赏。

更新1

OK,所以我想找到所选项目,但尚未计算突出显示。对于感兴趣的选择项目(假设你遵循苹果指南):

在控制器(在我的测试用例中的应用程序代理)我添加了以下:

在awakeFromNib

[personArrayController addobserver:self       forKeyPath:@"selectionIndexes"        options:NSkeyvalueObservingOptionNew       context:nil];

新方法

-(voID)observeValueForKeyPath:(Nsstring *)keyPath                      ofObject:(ID)object                       change:(NSDictionary *)change                      context:(voID *)context{    if([keyPath isEqualTo:@"selectionIndexes"])    {        if([[personArrayController selectedobjects] count] > 0)        {            if ([[personArrayController selectedobjects] count] == 1)            {                personModel * pm = (PersonModel *)                        [[personArrayController selectedobjects] objectAtIndex:0];                NSLog(@"Only 1 selected: %@",[pm name]);            }            else            {                // More than one selected - iterate if need be            }        }    }

不要忘记dealloc为非GC

-(voID)dealloc{    [personArrayController removeObserver:self                                forKeyPath:@"selectionIndexes"];    [super dealloc];}

仍在搜索高亮分辨率…

更新2

购买Macatomy的建议,但仍有一个问题。发布相关的类方法,看看我错了。

MyVIEw.h

#import <Cocoa/Cocoa.h>@interface MyVIEw : NSVIEw {    BOol selected;}@property (reaDWrite) BOol selected;@end

MyVIEw.m

#import "MyVIEw.h"@implementation MyVIEw@synthesize selected;-(ID)initWithFrame:(NSRect)frame {    self = [super initWithFrame:frame];    if (self) {        // Initialization code here.    }    return self;}-(voID)drawRect:(NSRect)dirtyRect{    NSRect outerFrame = NSMakeRect(0,143,104);    NSRect selectedFrame = NSInsetRect(outerFrame,2,2);    if (selected)        [[NScolor yellowcolor] set];    else        [[NScolor redcolor] set];    [NSBezIErPath strokeRect:selectedFrame];}@end

MyCollectionVIEwItem.h

#import <Cocoa/Cocoa.h>@class MyVIEw;@interface MyCollectionVIEwItem : NSCollectionVIEwItem {}@end

“MyCollectionVIEwItem.m *

#import "MyCollectionVIEwItem.h"#import "MyVIEw.h"@implementation MyCollectionVIEwItem-(voID)setSelected:(BOol)flag{    [(MyVIEw *)[self vIEw] setSelected:flag];    [(MyVIEw *)[self vIEw] setNeedsdisplay:YES];}@end
解决方法 它不太难做。确保在Interface Builder中为NSCollectionVIEw启用了“选择”。然后在您用于原型视图的NSVIEw子类中,声明一个名为“selected”的属性:

@property (reaDWrite) BOol selected;

更新代码这里:(添加超级电话)

子类NSCollectionVIEwItem和overrIDe -setSelected:

- (voID)setSelected:(BOol)flag{    [super setSelected:flag];    [(PrototypeVIEw*)[self vIEw] setSelected:flag];    [(PrototypeVIEw*)[self vIEw] setNeedsdisplay:YES];}

然后你需要在你的原型视图的drawRect:方法中添加代码来绘制突出显示:

- (voID)drawRect:(NSRect)dirtyRect {    if (selected) {       [[NScolor bluecolor] set];       NSRectFill([self bounds]);    }}

这只是简单地填充蓝色的视图,当它的选择,但可以自定义绘制高亮任何你想要的方式。我已经在我自己的应用程序中使用它,它的工作伟大。

总结

以上是内存溢出为你收集整理的objective-c – 选择突出显示在NSCollectionView中全部内容,希望文章能够帮你解决objective-c – 选择突出显示在NSCollectionView中所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1042674.html

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

发表评论

登录后才能评论

评论列表(0条)

保存