0

プログラムに構文の強調表示を追加しようとしています。
私はこのコードを使用してハイライトを追加しています:

-(void)highlightWord:(NSString *)word: (UIColor *)color {
    int amount = textDisplay.text.length;
    NSString *newString = textDisplay.text;
    NSUInteger count = 0, length = amount;
    NSRange range = NSMakeRange(0, length); 
    while(range.location != NSNotFound)
    {
        range = [textDisplay.text rangeOfString: word options:NSLiteralSearch range:range];
        if(range.location != NSNotFound)
        {
            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
            count++; 
        }
    }
    while (count != 0) {
        count--;
        NSRange highlight = [newString rangeOfString:word];
        newString = [textDisplay.text stringByReplacingCharactersInRange:highlight withString:@" "];
        UILabel *view1 = [[UILabel alloc] initWithFrame:[self frameOfTextRange:highlight inTextView:textDisplay]];
        view1.text = word;
        view1.textColor = color;
        view1.font = [UIFont fontWithName:@"System" size: 14.0];
        view1.backgroundColor = [UIColor clearColor];
        view1.textAlignment = UITextAlignmentLeft;
        [textDisplay addSubview:view1];
    }

}

- (IBAction)highlighString:(id)sender {

    for (UIView *subview in [textDisplay subviews]){
        if ([subview isKindOfClass:[UILabel class]]){
            [subview removeFromSuperview];
        }
    }

    [self highlightWord:@"test" :[UIColor blueColor]];
    [self highlightWord:@"this" :[UIColor redColor]];
    [self highlightWord:@"is" :[UIColor grayColor]];
    [self highlightWord:@"a" :[UIColor greenColor]];
}
@end

しかし、これは奇妙な結果を引き起こすようです:
..。


望ましい結果は、色付きのラベルにシームレスにオーバーレイされることです。

4

1 に答える 1

0

混合するUILabelと、UITextView簡単にコピーして貼り付けることができなくなります。面白いアイデアですが、シームレスに機能するのではないかと思います。iOSのすべての非ベータ版でのこの問題に対する通常のAppleの解決策はUIWebView、それ自体が恐ろしいものを使用することです。CocoaneticsにはDTRichTextEditorと呼ばれるものがありますが、これは私がレビューしていませんが、DTCoreTextでの作業の質に基づいて(私は非常に感銘を受けています)、iOS5でそれを期待しています。ベータ版はNDAの下にあります。将来を見据えた情報については、WWDC2012のセッション220をご覧ください。

特定のバグは、ラベルをサブビューとしてテキストビューに追加していることです。それらをピアとしてテキストビューの上に配置する必要があります。それらをテキストビュー内に配置すると、テキストビューの描画システムに影響を与えることになります。もちろん、テキストビューの上に配置すると、コピーと貼り付けの処理が難しくなります。なんとかしてタッチを通過させてから、選択範囲を正しく描画する必要があります。前の段落を参照してください。

完全に編集可能なリッチテキストビューがいくつかのラベルで簡単にハックできる場合は、GitHubにいくつかの実装があります。残念ながら、うまくやるのは実際にはかなり難しいです。私はそれを引き受けてくれたCocoaneticsに頭を下げます。私はすぐに諦めました。問題を一般的でないテキストビューに単純化できる場合は、この方法で可能かもしれませんが、調査するDTRichTextEditorか、をお勧めしUIWebViewます。WWDC2011のセッション511「iOS上のSafariでのリッチテキスト編集」を参照してください。

于 2012-07-22T18:13:10.440 に答える