Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

448
Views
How disable Copy, Select All in UITextView using swift 4.2?

How disable Copy, Select All in UITextView, But i need link is clickable in UITextview.

Here is all action disable, But selection is allow. I need only clickable link.

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {

        return false
}
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

just hijack it,

func swizzle() {
    guard let cls = NSClassFromString("UITextSelectionView") else { return }
    let originalSelector = NSSelectorFromString("updateSelectionRects")
    let swizzledSelector = #selector(UIView.updateSelectionRectsHijack)
    let originMethod = class_getInstanceMethod(cls, originalSelector)
    let swizzleMethod = class_getInstanceMethod(UIView.self, swizzledSelector)
    if let swizzledMethod = swizzleMethod, let originalMethod = originMethod{
        method_exchangeImplementations(originalMethod, swizzledMethod)
    }
}

extension UIView{
    @objc func updateSelectionRectsHijack(){ }
}

swizzle() should be call once only.


How I know UITextSelectionView ?

Check View Hierarchy,

888


How I know method updateSelectionRects ?

via runtime,

import ObjectiveC ,

then,

        var count: UInt32 = 0
        guard let methodArr = class_copyMethodList(NSClassFromString("UITextSelectionView"), &count) else { return }
        
        let cnt = Int(count)
        for i in 0..<cnt{
            let method = methodArr[i]
            let name = method_getName(method)
            if let type = method_getTypeEncoding(method){
                print(name, String(utf8String: type) ?? " _ | _ ")
            }
        }
over 4 years ago · Santiago Trujillo Report

0

You can also hijack, like this

let hijackInvocation: @convention(block) (Unmanaged<NSObject>, AnyObject) -> Void = { objectRef, invocation in
    
}


func swizzle() {

    guard let cls = NSClassFromString("UITextLoupeInteraction") else { return }
    let originalSelector = NSSelectorFromString("loupeGesture:")
    let originMethod = class_getInstanceMethod(cls, originalSelector)
    if let originM = originMethod{
        let encode = method_getTypeEncoding(originM)
        class_replaceMethod(cls, originalSelector, imp_implementationWithBlock(hijackInvocation as Any), encode)
    }
}

swizzle() should be call just once.


what is UITextLoupeInteraction ?

999

from @dengST30's answer.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!