0

UITextViewの中にNSMutableAttributedStringというテキストの書式設定を許可しています。書式設定の例は、太字、イタリック、フォントの変更などです。フォントアトリビュートを変更した後、NSMutableAttributedStringを使用してUITextviewの位置を維持する方法

属性の変更は正しく反映されています。しかし、setAttributedTextinvalidateDisplayForCharacterRangeの後、私のUITextViewはテキストの最下部までスクロールしてしまいます。 UITextViewの位置を変更せずにテキストの属性を置き換えるにはどうすればよいですか?

CODE:

- (void)placeCursorAfterFormatting 
{ 
    self.mytextview.selectedRange=currentRangeForFormatting; 
} 

- (IBAction)boldclicked:(UIButton *)sender { 
    currentRangeForFormatting = [self.mytextview selectedRange]; 

    NSMutableAttributedString *atstr = [[[self.mytextview.attributedText mutableCopy] attributedSubstringFromRange:currentRangeForFormatting] mutableCopy]; 
    [atstr enumerateAttribute:NSFontAttributeName inRange:(NSRange){0,[atstr length]} options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(id value, NSRange range, BOOL *stop) { 
     [atstr addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"AvenirNext-Bold" size:18] range:range]; 
    }]; 
    NSMutableAttributedString *atstrnew = [self.mytextview.attributedText mutableCopy]; 
    [atstrnew replaceCharactersInRange:currentRangeForFormatting withAttributedString:atstr]; 
    [self.mytextview setAttributedText:atstrnew]; 
    [self.mytextview.layoutManager invalidateDisplayForCharacterRange:currentRangeForFormatting]; 

    [self performSelector:@selector(placeCursorAfterFormatting) withObject:nil afterDelay:0.1]; 

} 

答えて

1

使用

scrollRangeToVisible

サンプル:(スウィフトで申し訳ありません)

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var oTV : UITextView! 

    override func 
    viewDidLoad() { 
     super.viewDidLoad() 
     oTV.attributedText = NSMutableAttributedString(string: "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.") 
    } 

    @IBAction func 
    boldclicked(_ : UIButton) { 
     let wRange = oTV.selectedRange 
     let wAS = oTV.attributedText.mutableCopy() as! NSMutableAttributedString 
     wAS.addAttribute(
      NSFontAttributeName 
     , value: UIFont.boldSystemFont(ofSize: 20) 
     , range: wRange 
     ) 
     oTV.attributedText = wAS 
     oTV.layoutManager.invalidateDisplay(forCharacterRange: wRange) 
     oTV.selectedRange = wRange 
     oTV.scrollRangeToVisible(wRange) 
    } 
} 
+0

完璧に働いていたこと、ありがとうございました! –

関連する問題