2013-04-20 38 views
4

我一直在尋找解決這個問題的一段時間,似乎沒有人遇到過類似的問題。UITextView檢測到動作時更改字體

基本上我有多個UITextViews,用於檢測地址,網址,電話號碼等(任何可以通過UIDataDectorTypeAll檢測到的)來自某些EKEvent.notes。然後,我將這些UITextViews添加爲UIScrollView的子視圖。

現在,由於某些原因,一旦UITextView檢測到地址或電話號碼併成爲可操作目標,它將隨機使用字體2x指定其字體!

如果我點擊,我已經設置了測試來重繪我的視圖。當最初將UITextView添加到視圖中時,我可以在黑色中看到正確的文本。然後它執行檢測處理併成爲可操作的目標。有時它保持適當的大小,有時它會以2倍的字體繪製(但仍然在適當的框架中,因此它會被裁剪)。

這是非常直接的,但這是我的代碼如下。所有變量都是正確的值,框架是正確的,文本是正確的,一切都是正確的,大約50%的時間繪製正確。它只是其他50%的時間(顯然)是2倍的字體!任何幫助是極大的讚賞!

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

回答

1

您可以在<UITextField>委託設置字體。 shouldBreakLineByWordBeforeCharacterAtIndex :):

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

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

我,因爲我使用的是自定義的斷行(的layoutManager有同樣的問題。必須禁用該功能。