Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

shouldInteractWith url textview delegate not called in ios9 but working in ios10?

Tags:

ios

swift3

shouldInteractWith url textview delegate not called in ios9 but i have implemented ios9 delegate method also. Code is below. If someone knows whats the issue fix then please let me know. thanks in advance for any help

import UIKit

class UrNestTermsView: UIView {

// Outlets
@IBOutlet weak var contentView: UIView!
@IBOutlet weak var termsTextView: UITextView!
@IBOutlet weak var termsUrNestCheckBox: UrNestCheckBox!
@IBOutlet weak var subscribeUrNestCheckBox: UrNestCheckBox!
@IBOutlet weak var subscribeTextView: UITextView!

fileprivate let fontOfTerms = UIFont.systemFont(with: 10)
fileprivate let labelTextColor = UIColor(colorLiteralRed: 102/255, green: 110/255, blue: 111/255, alpha: 1)

override func awakeFromNib() {
    super.awakeFromNib()
    self.setUp()
 }
}

extension UrNestTermsView: UITextViewDelegate {

func setUp() {
    self.subscribeTextView.textColor = labelTextColor
    self.subscribeTextView.font = fontOfTerms
    self.setUpTextView()
}

func setUpTextView() {

    // You must set the formatting of the link manually
    let linkAttributeTermsOfService = [
        NSLinkAttributeName: NSURL(string: "https://www.apple.com")!,
        NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
        NSForegroundColorAttributeName: labelTextColor
        ] as [String : Any]
    let linkAttributePolicy = [
        NSLinkAttributeName: NSURL(string: "https://www.google.com")!,
        NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
        NSForegroundColorAttributeName: labelTextColor
        ] as [String : Any]
    let linkAttributePaymentsTermsOfService = [
        NSLinkAttributeName: NSURL(string: "https://www.amazon.com")!,
        NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
        NSForegroundColorAttributeName: labelTextColor
        ] as [String : Any]
    let linkAttributeGuestRefundPolicy = [
        NSLinkAttributeName: NSURL(string: "https://www.yahoo.com")!,
        NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
        NSForegroundColorAttributeName: labelTextColor
        ] as [String : Any]
    let linkAttributeHostGuaranteeTerms = [
        NSLinkAttributeName: NSURL(string: "https://www.assembla.com")!,
        NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
        NSForegroundColorAttributeName: labelTextColor
        ] as [String : Any]


    let attributedString = NSMutableAttributedString(string: kTermsAndPolicy)

    // Set the 'click here' substring to be the link
    attributedString.setAttributes(linkAttributeTermsOfService, range: NSMakeRange(33, 16))
    attributedString.setAttributes(linkAttributePolicy, range: NSMakeRange(51, 6))
    attributedString.setAttributes(linkAttributePaymentsTermsOfService, range: NSMakeRange(59, 25))
    attributedString.setAttributes(linkAttributeGuestRefundPolicy, range: NSMakeRange(102, 19))
    attributedString.setAttributes(linkAttributeHostGuaranteeTerms, range: NSMakeRange(127, 20))


    attributedString.addAttribute(NSFontAttributeName, value: fontOfTerms, range: NSMakeRange(0, attributedString.length-1))
    attributedString.addAttribute(NSForegroundColorAttributeName, value: labelTextColor, range: NSMakeRange(0, attributedString.length-1))

    self.termsTextView.delegate = self
    self.termsTextView.attributedText = attributedString

    let attributedStringOfSubscribe = NSMutableAttributedString(string: kSubscribe)
    attributedStringOfSubscribe.addAttribute(NSFontAttributeName, value: fontOfTerms, range: NSMakeRange(0, attributedStringOfSubscribe.length))
    attributedStringOfSubscribe.addAttribute(NSForegroundColorAttributeName, value: labelTextColor, range: NSMakeRange(0, attributedStringOfSubscribe.length))

    self.subscribeTextView.delegate = self
    self.subscribeTextView.attributedText = attributedStringOfSubscribe
}

//For iOS 7...9
@available(iOS, deprecated: 10.0)
 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
    return true
}

@available(iOS 10.0, *)
 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
    return true
 }

}
like image 266
Sakthimuthiah Avatar asked Feb 21 '17 06:02

Sakthimuthiah


2 Answers

you must check Selectable in storyboard or do it in code :

textView.isSelectable = true
like image 170
Mehrdad Avatar answered Oct 17 '22 10:10

Mehrdad


try this:

@available(iOS, deprecated: 10.0)
func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange) -> Bool {
    return true
}

//For iOS 10
@available(iOS 10.0, *)
func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
    return true
}
like image 42
Brijesh Shiroya Avatar answered Oct 17 '22 12:10

Brijesh Shiroya