Как встроить пользовательскую кнопку в метку в swift? - PullRequest
0 голосов
/ 11 июля 2019

Я создал пользовательскую информационную кнопку, которую я хочу поместить в обычную UILabel.Идея состоит в том, чтобы на экране было написано «Нажмите (КНОПКА ЗДЕСЬ) для получения дополнительной информации».Есть ли способ сделать это без создания двух UILabel?И если создание двух меток - единственный способ, как я могу поместить все в одну строку?

Я попытался сделать (кнопку) внутри label.text, но это показывает свойства кнопки вместо ее размещения.Я также попробовал label.addSubview (кнопка), которая работает, но добавляет кнопку в неправильном месте.

1 Ответ

1 голос
/ 11 июля 2019

Лучший способ сделать это - использовать UITextView с NSAttributedString, где одним из атрибутов является ваша ссылка.

let textView = UITextView()
textView.delegate = self

// These allow the link to be tapped
textView.isEditable = false
textView.isScrollEnabled = false

// Removes padding that UITextView uses, making it look more like a UILabel
textView.textContainer.lineFragmentPadding = 0.0
textView.textContainerInset = .zero

Затем для NSAttributedString

let text = "Tap HERE for more information"
let linkText = "HERE"

// Get range for tappable section
let linkRange = (text as NSString).range(of: linkText)

// Styling
let attributes: [NSAttributedString.Key: Any] = [
    .foregroundColor: UIColor.black
]

// Actual Link!
let linkTextAttributes: [NSAttributedString.Key: Any] = [
    .underlineStyle: NSUnderlineStyle.single.rawValue,
    .link: "https://www.example.com" //The link you want to link to
]

let attributedString = NSMutableAttributedString(string: text, attributes: attributes)
attributedString.addAttributes(linkTextAttributes, range: linkRange)

Затем использоватьэти функции делегата UITextView

// Removes a lot of the actions when user selects text
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    return false
}

// Handle the user tapping the link however you like here
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
    viewModel.urlTapped(URL)
    return false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...