2016-10-17 5 views
0

Ниже приведена проблема, которую я пытаюсь исправить. У меня есть textView, текст которого является атрибутной строкой с атрибутом link. При нажатии ссылки я должен перейти на другой экран. Итак, я выполняю эту экранную навигацию по методу toInteractWithURL() делегирования textView. Все работает отлично, за исключением силы, касающейся textView, следующая страница загружается дважды. Это означает, что ifInteractWithURL() вызывается дважды при нажатии на силовое прикосновение. Я исправил это, проверив стек контроллеров представления, и если последний VC - тот, который собирается загрузить, я возвращаюсь оттуда. Но я хотел знать, есть ли другое решение, кроме этого. Ниже приведен фрагмент кодаshouldInteractWithURL вызывал дважды на 3d touch

textView.text = "" 

    guard var str = myStr else { 
     return nil 
    } 

    let linkAttribute = [NSLinkAttributeName: NSURL(string: "")!] 
    var attributedStr:NSMutableAttributedString? 
    if delay { 
     str += " " 
     attributedStr = NSMutableAttributedString(string: str) 

     let ctaStr = kSuccessStr 
     let ctaAttributedString = NSAttributedString(string: ctaStr, attributes: linkAttribute) 
     attributedStr!.appendAttributedString(ctaAttributedString) 
    } else { 
     let ctaStr = kFailedStr 
     attributedStr = NSMutableAttributedString(string: ctaStr, attributes: linkAttribute) 
    } 
    textView.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.grayColor()] 
    textView.attributedText = attributedStr 
    textView.delegate = thisTableViewDelegate 

func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool 
{ 
    if let textLink = textView.text 
    { 
     if (textLink.rangeOfString(str1) != nil) || 
     (textLink.rangeOfString(str2) != nil) 
     { 
      showSignUpForm(self) 
     } 
     else 
     { 
      showSuccessfulForm() 
     } 
    } 

    return true 
} 

ответ

1

Использование textView: shouldInteractWithURL: inRange: взаимодействие: вместо этого. Проверьте, является ли взаимодействие! = UITextItemInteractionInvokeDefaultAction и возвращает NO.

См https://developer.apple.com/reference/uikit/uitextviewdelegate/1618606-textview?language=objc

+0

TextView: shouldInteractWithURL: InRange: взаимодействие: осуждается –

+0

я не могу найти действительное значение для взаимодействия – markhorrocks

+0

я не вижу, как это решает проблему. Метод делегата по-прежнему вызывается дважды, один раз с взаимодействием '.rereview', а затем сразу после взаимодействия с' .presentActions'. Я рассматриваю это как ошибку в самой iOS. – matt