【问题标题】:UITextView dataDetectorTypes can't detect http://t.co/ links?UITextView dataDetectorTypes 无法检测到 http://t.co/ 链接?
【发布时间】:2020-08-04 15:05:06
【问题描述】:
    theTweet = [[[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)] autorelease];
    theTweet.text = [[tweets objectAtIndex:index] objectForKey:@"text"];
    theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
    [tweetView addSubview:theTweet];

[[tweets objectAtIndex:index] objectForKey:@"text"];包含带有 http://t.co/###### 的链接,但 UITextView 似乎没有检测到 http://t.co 链接。我需要改用 UIWebView 吗?

【问题讨论】:

  • 你错过了Tweet.dataDetectorTypes = UIDataDetectorTypeLink; ?
  • 已经进去了。还是不行。

标签: iphone objective-c xcode hyperlink


【解决方案1】:

我注意到的一件事是,为了让 UITextViews 识别链接,您需要将 selectable 设置为 YES。示例:

self.bodyTextView = [[UITextView alloc]initWithFrame:myFrame];
[self.bodyTextView setEditable:NO];
//this is the key
[self.bodyTextView setSelectable:YES];
[self.bodyTextView setDataDetectorTypes:UIDataDetectorTypeLink];
[self.bodyTextView setAttributedText:myAttributedText];

【讨论】:

  • 有什么可能的方法..我们可以保持数据检测器开启但可选择关闭?在我当前的代码中,我不想让用户选择文本,但想检测链接并允许点击它们。
  • 开箱即用,我不这么认为,但这里有一个关于这种事情的答案:stackoverflow.com/questions/36198299/…
【解决方案2】:

尝试使用这个希望对你有所帮助

默认情况下,UITextView 中的链接不可点击。但幸运的是,只需几行简单的代码即可启用它们:

theTweet.editable = NO;
theTweet.dataDetectorTypes = UIDataDetectorTypeLink;

很遗憾,您不能拥有带有可点击链接的可编辑 UITextView。如果将 editable 设置为 YES,则所有链接都将被视为常规文本。

像这样。

UITextView *theTweet= [[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)];
theTweet.text = @"http://t.co/######";
theTweet.editable = NO;
theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
[myview addSubview:theTweet];

【讨论】:

    【解决方案3】:

    你设置了吗:theTweet.dataDetectorTypes = UIDataDetectorTypeLink; ?

    现在你添加了,我尝试了这个代码:

        UITextView *theTweet;
    theTweet = [[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)];
    theTweet.text = @"http://t.co/######";
    theTweet.editable = NO;
    theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
    [myview addSubview:theTweet];
    

    它对我很有效。

    错误必须在其他地方。 (你也关闭了可编辑吗?)

    【讨论】:

    • 是的,忘记在原始帖子中添加。还是不行。
    • 将在下一次构建时仔细检查。
    • 确保您在设备上进行测试,而不是在模拟器中。
    • @Henning 这在模拟器中不起作用吗?或者这只是关于如何不信任您的模拟器的一般评论?
    【解决方案4】:

    你需要设置可编辑属性NO

    theTweet = [[[UITextView alloc] initWithFrame:CGRectMake(65, 10, 225, 65)] autorelease];
    theTweet.editable = NO; //add this line
    theTweet.text = [[tweets objectAtIndex:index] objectForKey:@"text"];
    theTweet.dataDetectorTypes = UIDataDetectorTypeLink;
    [tweetView addSubview:theTweet];
    

    【讨论】:

      【解决方案5】:

      做扩展可能很好,所以我们不必记住它......

      @implementation UITextView (Extension)
      
      - (instancetype)dataDetector :(UIDataDetectorTypes)types {
          self.dataDetectorTypes = types;
          if (types != UIDataDetectorTypeNone) self.selectable = true;
          return self;
      }
      
      @end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 2013-10-29
        • 2013-02-08
        • 1970-01-01
        • 2013-09-28
        • 2012-11-01
        • 1970-01-01
        相关资源
        最近更新 更多