Дайте UITextView интерактивную URL-ссылку

Привет, я уже некоторое время занимаюсь этой проблемой, я уже прочитал пару сообщений и не могу понять, как сделать кликабельный UITextView, который отправляет в Интернет. Вот мой код:

func transformText(text: String, underlined: Bool, linkURL: String) -> NSAttributedString {
    let textRange = NSMakeRange(0, text.characters.count)
    let attributedText = NSMutableAttributedString(string: text)
    if underlined{
        attributedText.addAttribute(NSUnderlineStyleAttributeName , value: NSUnderlineStyle.styleSingle.rawValue, range: textRange)
        attributedText.addAttribute(NSUnderlineColorAttributeName , value: UIColor.lightGray, range: textRange)
    }
    attributedText.addAttribute(NSFontAttributeName , value: UIFont(name: "Helvetica-Light", size: 17)!, range: textRange)
    attributedText.addAttribute(NSForegroundColorAttributeName , value: UIColor.lightGray, range: textRange)
    if(linkURL != "")
    {
        let attrib = [NSLinkAttributeName: NSURL(string: linkURL)!]
        attributedText.addAttributes(attrib, range: textRange)
    }
    return attributedText
}

Вот как я это называю:

TextContent.attributedText = transformText(text: self.TelBox.TextContent.text, underlined: true, linkURL: "https://www.google.fr")`

заранее спасибо


person BigBurger    schedule 03.10.2017    source источник
comment
Почему UITextField? Это должно быть для редактирования, а не выбора.   -  person Larme    schedule 03.10.2017
comment
Мне очень жаль, я имел в виду UITextView   -  person BigBurger    schedule 03.10.2017
comment
developer.apple.com/documentation/uikit/uitextviewdelegate/ Установите делегат, реализуйте его и прочитайте документацию, потому что вам нужно установить какое-то свойство вашего textView для некоторых значений.   -  person Larme    schedule 03.10.2017
comment
Вы используете конструктор интерфейсов/раскадровку или создаете свой UITextView с помощью кода?   -  person DonMag    schedule 03.10.2017
comment
Я реализовал это через код   -  person BigBurger    schedule 03.10.2017
comment
вы должны использовать это: github.com/TTTAttributedLabel/TTTAttributedLabel. Это в цели c, но есть много поддержки для этого проекта и даже проблемы с переполнением стека, которые покажут вам, как использовать его с быстрым   -  person Nevin Jethmalani    schedule 03.10.2017
comment
Я обязательно проверю, но разве это не посвящено UILabels? в любом случае спасибо :)   -  person BigBurger    schedule 03.10.2017


Ответы (4)


Выберите UITextView на раскадровке и перейдите к «Показать инспектор атрибутов», затем в «Поведении» отмените выбор «Редактируемый» и в «Детекторе данных» выберите «Ссылка». Затем перейдите в «Sohw the Identity spector» и в «чертах» выберите «Ссылка» и «Выбрано».

person Habibur Rahman    schedule 03.10.2017
comment
спасибо, но, как вы можете видеть, весь мой код сделан программно, плюс я хочу выбрать, какую ссылку я поставлю, а не оставлять это на определение протокола - person BigBurger; 04.10.2017

Вы должны установить редактируемый YES или установить выбираемый YES

NSString *text = @"this is google web link";
UITextView *textView = [[UITextView alloc] init];

NSDictionary *dictionary = @{NSFontAttributeName:[UIFont systemFontOfSize:10],NSForegroundColorAttributeName:[UIColor whiteColor]};
NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:text attributes:dictionary];

textView.attributedText = attributeStr;

[attributeStr addAttributes:@{NSLinkAttributeName: [NSURL URLWithString:@"http://www.google.com"]} range:[_readMessage rangeOfString:@"google web link"]];
textView.attributedText = attributeStr;

textView.editable = NO;
textView.selectable = YES;
textView.delegate = self;

ссылка google ответит делегатом

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
person Ailsa    schedule 13.06.2018

Дело в том, что вы хотите, чтобы UITextView делался интерактивным, требует, чтобы вы сделали UITextView недоступным для редактирования, потому что, когда вы нажимаете на текст, он запускает клавиатуру. Чтобы предотвратить это, вы можете использовать

textView.isEditable = ложь

Надеюсь, поможет.

person manismku    schedule 03.10.2017
comment
Я добавил это, но текст по-прежнему не кликабельный ... когда я добавил NSLinkAttributeName, текст был выделен, но больше ни к чему не приводит. - person BigBurger; 03.10.2017

Убедитесь, что вы также включили определение типа данных. Для гиперссылок:

theTextView.dataDetectorTypes = [.link]
person DonMag    schedule 03.10.2017