2012-05-17 10 views
12

UITextviewを長時間押すと拡大鏡が表示されます。どうすればそれを無効にできますか?UITextviewで拡大鏡を無効にする

+0

このスレッドをチェックしてください(http://stackoverflow.com/questions/866200/disable-magnifying-glass-in-uitextfield) – Alexander

+0

答えはこちら[こちら](https://stackoverflow.com/a/) 48077605/4061501)。 **サブクラスは必要ありません。** –

答えて

29

最後に、この問題は、また、ここで

を解決され、誰もが

を必要とする場合には、参照用のコードは、サブクラス化UITextviewのm個のファイルであることが動作するコード

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

を追加しました。

+2

私は間違っていないと、これは完全に長いプレスを無効にします。言い換えれば、テキストビューにURLリンクや電話番号が含まれている場合(検出を有効にした場合)、長く押すとテキストビューでは応答できなくなります。 – 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

イリーナの答えは次のようにiOSの9.xのとiOSの10のクラッシュのために(長押しが続くタップを試してみて、あなたが拡大オーバーレイを持つことになります)、部分的に動作します@これが私のために

@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

の作品:

***キャッチされない例外により「NSInvalidArgumentException」、理由にアプリを終了:「あなたはUIViewControllerPreviewing障害関係のジェスチャー認識装置 のデリゲート を変更することはできません」

次のコードは、考えられるタップや長いジェスチャーのすべての組み合わせで、iOS 9.xと10.xの両方で動作します。

Appleのレビューで受け付けられるとは限りません。

@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能力を維持するためにUIScrollViewDelayedTouchesBeganGestureRecognizerUIScrollViewPanGestureRecognizerを必要としています。どちらのクラスもプライベートAPI の一部ですので、自己責任で使用してください。

関連する問題