2017-02-15 23 views
0

У меня есть текстовое представление, которое имеет свойства--> SELECTABLE: YES и EDITABLE: NO. Для открытия URL написано в TextView, я использовалКонтролировать отображаемый экран действия при длительном нажатии на url в текстовом виде

- (BOOL)textView:(UITextView)textView shouldInteractWithURL:(NSURL)URL inRange:(NSRange)characterRange 

метод делегата от TextView, который, кажется, работает хорошо.

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

Пожалуйста, укажите способы.

enter image description here

Пытались с помощью ActionSheet делегата, но это не сработало.

+0

Что вы хотите контролировать в 'Actionheet'? – iPeter

+0

Если вы счастливы использовать стороннюю библиотеку [TTTAttributedLabel] (https://github.com/TTTAttributedLabel/TTTAttributedLabel), вы можете многое предложить. Я использовал его в различных проектах, чтобы вставить «гиперссылки» в текстовые блоки, не отображая фактический URL (бит, эквивалентный '' тегам в HTML). – Olivier

+0

Если вы используете какое-то дополнительное имя библиотеки, то оно должно быть –

ответ

0

Swift4

Просто возвратите false в -shouldInteractWith, но вы должны обрабатывать взаимодействия самостоятельно, если вам нужна.

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool 
{  
    print(String(format: "%@", URL as CVarArg)) 

    let alerSheet = UIAlertController.init(title: nil, message: nil, preferredStyle: .actionSheet) 

    alerSheet.addAction(UIAlertAction.init(title: "Copy", style: .default, handler: { (action) in 
     print("copy action") 
    })) 

    alerSheet.addAction(UIAlertAction.init(title: "Other", style: .default, handler: { (action) in 
     print("other action") 
    })) 

    alerSheet.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: { (action) in 
     print("cancel action") 
    })) 
    self.present(alerSheet, animated: true, completion: nil) 

    return false 
}