Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Наконец, эта проблема также решена.

Вот код для ссылки, если кому-то нужно

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

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

Он работает.

Ответ 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;

}

Ответ 3

Xamarin.iOS:

  1. Создать пользовательский UITextView
  2. Переопределите метод GestureRecognizerShouldBegin в вашем UITextView
public override bool GestureRecognizerShouldBegin(UIGestureRecognizer gestureRecognizer)
{
    if (gestureRecognizer is UILongPressGestureRecognizer ||
        gestureRecognizer.Name != "UITextInteractionNameLinkTap")
    {
        return false;
    }
    return true;
}

Ответ 4

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

*** Завершение приложения из-за неперехваченного исключения "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 , поэтому используйте это на свой страх и риск.

Ответ 5

Swift 4 версия ответа @user1120133:

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

      super.addGestureRecognizer(gestureRecognizer)
    }