2012-05-17 15 views
12

में UITextview में मैग्निफाइंग ग्लास को अक्षम करें जब लंबे समय के आवर्धक ग्लास के लिए स्पर्श दबाया जाता है। मैं इसे कैसे अक्षम कर सकता हूं।UITextview

+0

यह [थ्रेड] देखें (http://stackoverflow.com/questions/866200/disable-magnifying-glass-in-uitextfield) – Alexander

+0

उत्तर है [यहां] [https://stackoverflow.com/a/ 48077605/4061501)। ** कोई सबक्लास आवश्यक नहीं है। ** –

उत्तर

29

अंत में इस मुद्दे को भी

का समाधान यहाँ है मामला किसी में संदर्भ के लिए कोड

जरूरत subclassed UITextView के मीटर फ़ाइल में कोड

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    //Prevent zooming but not panning 
    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) 
    { 
     gestureRecognizer.enabled = NO; 
    } 
    [super addGestureRecognizer:gestureRecognizer]; 
    return; 
} 

यह काम करता है जोड़ा।

+2

लेकिन अगर मुझे गलत नहीं लगता है तो यह पूरी तरह से लंबे प्रेस को अक्षम करता है। दूसरे शब्दों में, यदि आपके टेक्स्ट व्यू में एक यूआरएल लिंक या फोन नंबर है (यदि आप डिटेक्शन सक्षम करते हैं) तो लंबे समय तक दबाएं, आपका टेक्स्ट व्यू उनको जवाब देने में सक्षम नहीं होगा, क्या मैं सही हूँ? – antf

+0

कैरेट और टेक्स्ट संपादन को भी अक्षम करना चाहते हैं? यह उत्तर देखें-> [लिंक] (http://stackoverflow.com/questions/18139234/prevent-editing-of-text-in-uitextfield-and-hide-cursor-caret-magnifying-glass-wh/18139235#18139235) – thedeveloper3124

+1

हां, जैसे @antf ने कहा, यह कोड लिंक, फोन और घटनाओं पर पूरी तरह से स्पर्श को अक्षम करता है। – sig

2

यह मेरे लिए काम करता

@implementation CustomTextView 

- (NSArray *)selectionRectsForRange:(UITextRange *)range 
{ 
    self.selectedTextRange = nil; 
    return nil; 
} 

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    gestureRecognizer.delegate = self; 

    [super addGestureRecognizer:gestureRecognizer]; 
    return; 
} 

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    return NO; 
} 

- (CGRect)caretRectForPosition:(UITextPosition *)position 
{ 
    return [super caretRectForPosition:self.endOfDocument]; 
} 


- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && !gestureRecognizer.delaysTouchesEnded)) 
    { 
     return NO; 
    } 
    else 
     return YES; 

} 
0

@ इरीना के उत्तर आंशिक रूप से काम करता है (एक नल एक लंबे प्रेस के बाद की कोशिश करो और आप एक आवर्धक ओवरले करना होगा) निम्नलिखित के साथ आईओएस 10 पर iOS 9.x और दुर्घटनाओं के लिए :

*** न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से एप्लिकेशन समाप्त:

'तुम UIViewControllerPreviewing विफलता संबंध इशारा पहचानकर्ता के प्रतिनिधि नहीं बदल सकते'

निम्न कोड आईप 9 .x और 10.x के लिए दोनों टैप और/या लंबे संकेतों के संयोजन में काम करता है जो मैं सोच सकता हूं।

नोट मुझे गारंटी नहीं है कि यह ऐप्पल की समीक्षा द्वारा स्वीकार किया जाएगा।

@implementation CustomTextView 

- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
{ 
    NSArray *allowedGestures = @[ @"UILongPressGestureRecognizer", @"UIScrollViewDelayedTouchesBeganGestureRecognizer", @"UIScrollViewPanGestureRecognizer" ]; 

    if (![allowedGestures containsObject:NSStringFromClass([gestureRecognizer class])]) 
    { 
     return; 
    } 

    if (([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && !gestureRecognizer.delaysTouchesEnded)) 
    { 
     return; 
    } 

    [super addGestureRecognizer:gestureRecognizer]; 
} 

@end 

हम स्क्रॉल करने के लिए UITextView क्षमता रखने के लिए UIScrollViewDelayedTouchesBeganGestureRecognizer और UIScrollViewPanGestureRecognizer की जरूरत है। दोनों कक्षाएं निजी एपीआई का हिस्सा हैं, इसलिए अपने जोखिम पर इसका उपयोग करें।