在我的应用程序中,我创建了一个包含以下方法的UILabel扩展:
func formatTextInLabel() {
let text = self.text
let font = UIFont(name: fontName, size: 16.0)
let titleDict: NSDictionary = [NSFontAttributeName: font!]
// This will give me an attributedString with the desired font
let attributedString = NSMutableAttributedString(string: text!, attributes: titleDict as! [String : AnyObject])
let regex = try? NSRegularExpression(pattern: "#(\\w+)", options: [])
let matches = regex!.matches(in: text!, options: [], range: NSMakeRange(0, text!.characters.count))
for match in matches {
let matchRange = match.rangeAt(0)
let titleDict: NSDictionary = [NSForegroundColorAttributeName: orangeColor]
attributedString.addAttributes(titleDict as! [String : AnyObject], range: matchRange)
}
self.attributedText = attributedString
}
并以我选择的颜色突出显示所有#hashtags
。但是它们不是可点击的,我在SO上发现了一些帖子说它无法实现:How to detect and make hyperlinks/mentions/hashtags clickable in UILabel?但它似乎已经过时了(希望如此)。你能给我一个提示吗?在控制台中显示所选主题标签的名称?
还有一件事要添加 - 我知道某些pod
类似于ActiveLabel
或类似的,但我尝试了它们并且在我的情况下遇到了约束问题,所以我想实现这个效果来自我自己的代码。
答案 0 :(得分:1)
尝试在标签中添加UITapGestureRecognizer
:
let tap = UITapGestureRecognizer(target: self, action: #selector(handleLabelTap(_:)))
label.addGestureRecognizer(tap)
func handleLabelTap(_ sender: UITapGestureRecognizer) {
// Do something here for when the user taps on the label
}
要使其正常工作,您可能需要将isUserInteractionEnabled
设置为true
以获取标签。我只是在Xcode中做了一个测试并且它有效。所以:
label.isUserInteractionEnabled = true
编辑:
如果要确定已触发哪个主题标签,请在类声明的顶部,在初始化之前为空UILabel
数组创建属性,并为此创建一个空的UITapGestureRecognizer
数组:< / p>
var labels:[UILabel] = [UILabel]()
var labelTaps:[UITapGestureRecognizer] = [UITapGestureRecognizer]()
然后,当您创建每个标签时,将标签和点击手势附加到每个相应的数组
let label = UILabel()
// Set all label properties as you wish
// Make sure to add
label.isUserInteractionEnabled = true
// Create the tap gesture
let tap = UITapGestureRecognizer(target: self, action: #selector(handleLabelTap(_:)))
label.addGestureRecognizer(tap)
labels.append(label)
labelTaps.append(tap)
然后,当用户点击其中一个哈希标记时,您可以获取向该方法发送哪个点击手势的索引,然后使用它来确定它是哪个标签,因为它具有相同的索引'labels'数组,因为它的各自的手势识别器将在'labelTaps'数组中。这是你如何做到的:
func handleLabelTap(_ sender: UITapGestureRecognizer) {
if let index = labelTaps.index(of: sender) {
let tappedLabel:UILabel = labels[index]
// Now you can do whatever you want
print("User tapped label with hash-tag: \(tappedLabel.text)")
}
}
答案 1 :(得分:0)
您无法在Authorization: Bearer Mykey
中点击链接,但您可以UILabel
或UITextField
。这些允许添加可点击链接。
如果链接显示为链接,例如http://address@domain.com,则您只需打开链接检测即可。如果您希望链接显示任意字符串,如&#34;请单击此处&#34;并且使该字符串可以点击,您需要在文本字段/文本视图中安装属性字符串。
这些链接是什么类型的,您希望它在文本中看起来像什么?