检测到操作时,UITextView会更改字体

时间:2013-04-20 01:58:04

标签: ios objective-c uiscrollview uitextview datadetectortypes

我一直在寻找解决这个问题的方法,似乎没有人遇到过类似的问题。

基本上我有多个UITextView用于检测来自某些EKEvent.notes的地址,网址,电话号码等(可以通过UIDataDectorTypeAll检测到的任何内容)。然后我将这些UITextViews添加为UIScrollView的子视图。

现在,由于某种原因,一旦UITextView检测到地址或电话号码并成为可操作的目标,它将随机使用其指定字体的2x字体进行绘制!

如果我点按,我会设置测试以重新绘制我的观看次数。当UITextView最初添加到视图中时,我可以用黑色看到正确的文本。然后它执行检测处理并成为可操作的目标。有时它保持适当的大小,有时它以2x字体绘制(但仍然在适当的帧中,因此它被剪裁)。

这是非常直接的,但这是我的代码。所有变量都是正确的值,框架是正确的,文本是正确的,一切都是正确的,大约50%的时间是正确的。它只是其他50%的时间它(显然)2x字体!非常感谢任何帮助!

UITextView *locationTextView = [[UITextView alloc] init];
locationTextView.dataDetectorTypes = UIDataDetectorTypeAll;
locationTextView.text = location;
locationTextView.font = [UIFont fontWithName:@"AvenirNext-Regular" size:17];
locationTextView.editable = NO;
locationTextView.userInteractionEnabled = YES;
locationTextView.contentInset = UIEdgeInsetsMake(-8,-8,-8,-8);
locationTextView.frame =CGRectMake(kBufferLeft, daySize.height, kBufferDayViewTextWidth, locationSize.height);
[scrollView addSubview:locationTextView];

正确:http://i.imgur.com/3pJ43kj.jpg

不正确:http://i.imgur.com/DLq4gco.jpg

(不允许发布图片,抱歉。)

同样精确的代码产生了两种效果。谢谢你的时间。

干杯!

编辑:我选择使用TTTAttributedLabels来解决此问题。

github.com/mattt/TTTAttributedLabel

2 个答案:

答案 0 :(得分:1)

您可以在<UITextField>代理处设置字体。

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

{ 
  locationTextView.font = [UIFont fontWithName:@"AvenirNext-Regular" size:17];
}

答案 1 :(得分:0)

我遇到了同样的问题,因为我使用的是自定义换行符(layoutManager:shouldBreakLineByWordBeforeCharacterAtIndex :)。不得不禁用它。