可可 – IKImageBrowserView可以显示多行标题吗?

可可 – IKImageBrowserView可以显示多行标题吗?,第1张

概述我希望我的IK ImageBrowserView通过包装它们并以多行显示它们来显示长标题,但我一直无法实现这一点. 我已经尝试更改ImageBrowserCell子类中返回的titleFrame的大小,并在标题上设置段落样式,以便它应该换行(NSLineBreakByWordWrapping),但我只得到一行文本. 有没人试过这个?我可能会尝试其他任何建议吗? 我很害怕,不容易.一种方法是将ima 我希望我的IK ImagebrowserVIEw通过包装它们并以多行显示它们来显示长标题,但我一直无法实现这一点.

我已经尝试更改ImagebrowserCell子类中返回的TitleFrame的大小,并在标题上设置段落样式,以便它应该换行(NSlineBreakByWorDWrapPing),但我只得到一行文本.

有没人试过这个?我可能会尝试其他任何建议吗?

解决方法 我很害怕,不容易.一种方法是将imageTitle留空并在CALayer上绘制文本.我能够以相当不错的结果使它工作:

首先要做的事情 – 因为您不打算使用标准的imageTitle属性,所以您希望在< IKImagebrowserItem>符合数据对象中创建新的Title属性.我称我为冠军.

然后,您要创建一个IKImagebrowserCell子类.确保告诉您的IKImagebrowserVIEw您正在使用自定义单元格;我刚为此写了一个快速类别:

@implementation IKImagebrowserVIEw(CustomCell)- (IKImagebrowserCell *)newCellForRepresentedItem:(ID)cell{    return [[MyCustomImagebrowserCell alloc] init];}@end

接下来,在自定义单元格中,重写方法 – (CALayer *)layerForType:(Nsstring *)类型.为特定图层位置类型创建并返回CALayer:

- (CALayer *)layerForType:(Nsstring *)type{        if( [type isEqualToString:IKImagebrowserCellBackgroundLayer] )    {               CALayer *layer = [CALayer layer];        layer.delegate = self;        layer.frame = self.frame; // the cell's frame        layer.name = type; // a way to refer to the layer location type during drawing if need be        [layer setNeedsdisplay];        return layer;    }    return [super layerForType:type];}

然后,在自定义单元格中实现-drawLayer:inContext:方法来处理图层的绘图:

- (voID)drawLayer:(CALayer *)layer inContext:(CGContextRef)context{    // Set the current context.    [NSGraphicsContext saveGraphicsstate];    NSGraphicsContext *nscg = [NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:NO];    [NSGraphicsContext setCurrentContext:nscg];    Nsstring *Title = [self.representedItem Title];    // Wrap and center the text    NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];    [paragraphStyle setlineBreakMode:NSlineBreakByWorDWrapPing];    [paragraphStyle setAlignment:NSCenterTextAlignment];    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];    [attrs setobject:paragraphStyle forKey:NSParagraphStyleAttributename];    [attrs setobject:[NSFont systemFontOfSize:12.0f] forKey:NSFontAttributename];    CGfloat padding = 4.0f;    [Title drawInRect:NSMakeRect(        0,-(self.imageFrame.size.height + padding),self.frame.size.wIDth,100    ) withAttributes:attrs];    [NSGraphicsContext restoreGraphicsstate];}

不幸的是,这种方法确实有一些缺点.文本没有得到像imageTitle那样的蓝色选择背景.但是,您可以使用IKImagebrowserCellSelectionLayer的自定义CALayer中的NSBezIErPath绘制自己的选择背景.

希望这足以继续下去.

总结

以上是内存溢出为你收集整理的可可 – IKImageBrowserView可以显示多行标题吗?全部内容,希望文章能够帮你解决可可 – IKImageBrowserView可以显示多行标题吗?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存