Cocoa Link Label

Cocoa 的label组件默认不太容易加上链接,但它提供了属性字符串,我们可以对其进行设置,即可实现我们需要的link label.

解决方案

定义方法

将一段html字符串格式化为属性字符串,为后面设置label属性值做准备。

-(NSAttributedString *)stringFromHTML:(NSString *)html withFont:(NSFont *)font
{
    if (!font) font = [NSFont systemFontOfSize:0.0];  
    // Default font
    html = [NSString stringWithFormat:@"<span style=\"font-family:'%@'; font-size:%dpx;\">%@</span>", 
    font.fontName, 
    (int)font.pointSize, 
    html];
    NSData *data = [html dataUsingEncoding:NSUTF8StringEncoding];
    NSAttributedString* string = [[NSAttributedString alloc] initWithHTML:data documentAttributes:nil];
    return string;
}

调用方法及对应上下文

我们在调用之前做了两件事

首先,我们将label设为允许修改其文本属性;

其次,我们将其设置为可选择即可点击。

// all for link label
[_linklabel setAllowsEditingTextAttributes: YES];
[_linklabel setSelectable:YES];
NSString *updateUrl = [NSString stringWithFormat:@"<a href=\"%s\">Update</a>", 
"http://www.cppfun.com"];
_linklabel.attributedStringValue = [self stringFromHTML:updateUrl withFont:_linklabel.font];

补充

如果您没有设置应用程序安全加载,请将以下代码添加到您的Info.plist中:

<plist version="1.0">
<dict>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    ...
</dict>
</plist>

总结

简单来讲,macOS Cocoa比Windows MFC在大多数方面要简单很多,大家只需要多多尝试即可。

关于

国内cocoa开发人员及资料有限,希望您多使用xcode document,做到举一反三.

Happy everyday!

from cppfun 刘凯·数据科学家

from s.kaidimoer.com 凯迪墨尔组件服务