如何在UITextView中禁用放大

时间:2014-07-18 10:44:03

标签: ios objective-c uitextview magnification nsdatadetector

我想在UITextView中摆脱放大和文本选择,但我需要电话号码,链接和地址检测器。我正在使用

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

停止放大,但它也会停止选择textview检测到的电话号码/地址/链接。 如果我[_txtView setSelectable:NO];它会停止放大和文本选择以及数据检测。

4 个答案:

答案 0 :(得分:3)

将图像放在.xib文件中的UITextview上,然后放在代码下面。

 - (void)viewDidLoad
  {
      [super viewDidLoad];
      self.navigationController.navigationBarHidden = YES;

      UITapGestureRecognizer *tappress= [[UITapGestureRecognizer alloc] initWithTarget:self    action:@selector(longPressed:)];
      img.userInteractionEnabled = YES;
      [img addGestureRecognizer:tappress];
}

-(void)longPressed:(UILongPressGestureRecognizer *)sender
{
    [yourtextview becomeFirstResponder];
}

在我的代码中,img是一个UIImageview

答案 1 :(得分:2)

经过相当长的一段时间的尝试,我设法通过覆盖UITextView子类上的addGestureRecognizer来阻止文本选择,放大和保持数据检测(链接可点击等),只允许UILongPressGestureRecognizer延迟触摸结束:

UIUnselectableTextView.m

-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && gestureRecognizer.delaysTouchesEnded)
    {
        [super addGestureRecognizer:gestureRecognizer];
    }
}

答案 2 :(得分:0)

试试这个:

  1. 将textview的委托设置为viewcontroller
  2. 添加此方法

    - (void)textViewDidChangeSelection:(UITextView *)textView
    {
         NSRange selected;
         selected.location = 0;
         selected.length = 0;
         textView.selectedRange = selected;
    }
    
  3. 这会禁用放大,但仍然可以点击链接

答案 3 :(得分:-2)

您只需要确保为UItextfield设置了正确的参数(并且无需通过覆盖手势来实际完成它)。我想如果您在界面构建器中更改“行为”和“检测”的属性如下,您将获得所需的行为。enter image description here