如何在文本中添加按钮,例如Instagram应用程序的哈希标签的Twitter上的按钮



文本中的按钮,如Instagram或Twitter应用程序

在我的iOS应用程序上,我需要在文本中嵌入按钮,就像Instagram或Twitter应用程序在帖子中的哈希标签一样。

一些详细要求是

  • 按钮触发 iOS 本机操作"内部修饰">
  • 按钮需要像 UIButtons 一样在"向下触摸"上发光
  • 按钮不是网络链接

.link AttribuedString 不起作用(这就是人们所说的解决方案(

对 AttributedString 使用 .link 属性是我得到的最接近的,但它有一些副作用。

它满足我的所有要求,但是当我长按按钮时,iOS通过其UIKit显示UITextLabel上的链接文本,并且链接文本也可以拖动,我不希望这些发生。

这是我尝试过的。 我基本上添加了.link属性并将关键字设置为URL,我可以在UITextView的委托方法"应该与URL交互"上重试特定关键字并触发一些iOS本机代码。

public extension NSMutableAttributedString {
func setKeywordAsLink(keyword: String, fontAttributeForKeyword font: UIFont) {
guard let url = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { return }
self.addAttributes([ NSAttributedString.Key.font: font], range: NSString(string: self.string).range(of: keyword))
self.addAttribute(.link, value: url, range: NSString(string: self.string).range(of: keyword))
}
}

我没有现成的代码,但我不推荐上面的方法。您应该创建自定义 UIButton 类并重写 isHighlight 和 isSelected 函数。这是一个类似的示例,用于从我拥有的旧项目中覆盖isT突出显示。您可以像往常一样添加UIButton,只需将其设置为自定义类的类型(此处为let按钮:UIButtonExample!(,然后您可以根据需要为TouchUpInside和TouchDown添加常规IBActions。

class UIButtonExample: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
//set up origin formatting here
layer.borderWidth = 1.0
layer.borderColor = .black
}

override var isHighlighted: Bool {
didSet {
if self.isHighlighted {
//pressed on
self.animatePress()
} else {
//unpressed
self.animateHome()
}
}
}
func animatePress() {
UIView.animate(withDuration: 0.15) {
self.transform = CGAffineTransform(scaleX: 0.9, y: 0.9)
}
}
func animateHome() {
UIView.animate(withDuration: 0.3) {
self.transform = CGAffineTransform.identity
}
}
}

最新更新