Отключить увеличительное стекло в UITextview

ВUITextview при длительном нажатии появляется увеличительное стекло. Как я могу отключить это.

 Lal Krishna03 янв. 2018 г., 13:41
ОтветВО. Нет необходимости в подклассе.
 Alexander17 мая 2012 г., 19:53
Проверьте этонит

Ответы на вопрос(4)

@ Ответ Ирины работает частично (попробуйте нажать, а затем нажмите и удерживайте увеличительное изображение) для iOS 9.

*** Завершение работы приложения из-за необработанного исключения «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

Нам нужноUIScrollViewDelayedTouchesBeganGestureRecognizer а такжеUIScrollViewPanGestureRecognizer чтобы сохранитьUITextView возможность прокрутки. Оба класса являются частью частного API так что используйте это на свой страх и риск.

Это работает для меня

@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;

}
Решение Вопроса

Вот код для справки на случай, если кому-то понадобится

в m файле подкласса UITextview добавлен код

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

Оно работает

 Madhu07 окт. 2015 г., 11:32
У меня такая же проблема в ios9, мне нужно разрешить только мажинговое стекло, но не события касания URL и телефона.
 Josh Bernfeld09 авг. 2013 г., 04:40
Хотите отключить каретку и редактирование текста? Смотрите этот ответ ->ссылк
 sig14 мая 2015 г., 12:41
Да, как сказал @antf, этот код полностью отключает прикосновения к ссылкам, телефонам и событиям.
 Madhu09 окт. 2015 г., 13:14
любые обновления, пожалуйста.
 antf17 мая 2012 г., 21:16
Но если я не ошибаюсь, это полностью отключает долгое нажатие. Другими словами, если ваше текстовое представление содержит URL-ссылку или номер телефона (если вы включили обнаружения), то при длительном нажатии ваше текстовое представление не сможет на них отвечать, я прав?

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {
      //Prevent long press to show the magnifying glass
      if gestureRecognizer is UILongPressGestureRecognizer {
        gestureRecognizer.isEnabled = false
      }

      super.addGestureRecognizer(gestureRecognizer)
    }

Ваш ответ на вопрос