3

ユーザーが textField/textView に入力した太字および斜体のテキストのみを選択するにはどうすればよいですか?

選択したテキストを太字斜体、下線、およびこれら 3 つの任意の組み合わせにすることができますが、その逆はどうでしょうか。

*これは Mac OSX または iOS に固有のものではありません。どちらかのソリューションが適しています。

編集:

属性付き文字列のテキストを次のように読んでみました:

NSAttributedString *string=self.textView.string;

しかし、textView と textField が返さNSStringれるので、すべての書式設定がなくなります。

4

1 に答える 1

7

iOS では、ラベル/テキストフィールドで attributedText プロパティを使用します

OSX では attributedStringValue を使用します

次に、attributedText の属性を列挙し、各属性を確認できます。いくつかのコードを作成します (osx & iOS)

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"none "];

id temp = [[NSAttributedString alloc] initWithString:@"bold " attributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:12]}];
[str appendAttributedString:temp];

temp = [[NSAttributedString alloc] initWithString:@"italic " attributes:@{NSFontAttributeName: [UIFont italicSystemFontOfSize:12]}];
[str appendAttributedString:temp];

temp = [[NSAttributedString alloc] initWithString:@"none " attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:12]}];
[str appendAttributedString:temp];

temp = [[NSAttributedString alloc] initWithString:@"bold2 " attributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:12]}];
[str appendAttributedString:temp];

self.label.attributedText = str;

NSMutableString *italics = [NSMutableString string];
NSMutableString *bolds = [NSMutableString string];
NSMutableString *normals = [NSMutableString string];

for (int i=0; i<str.length; i++) {
    //could be tuned: MOSTLY by taking into account the effective range and not checking 1 per 1
    //warn: == might work now but maybe i'd be cooler to check font traits using CoreText
    UIFont *font = [str attribute:NSFontAttributeName atIndex:i effectiveRange:nil];
    if(font == [UIFont italicSystemFontOfSize:12]) {
        [italics appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]];
    } else if(font == [UIFont boldSystemFontOfSize:12]){
        [bolds appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]];
    } else {
        [normals appendString:[[str mutableString] substringWithRange:NSMakeRange(i, 1)]];
    }
}

NSLog(@"%@", italics);
NSLog(@"%@", bolds);
NSLog(@"%@", normals);

今ここにそれを見つける方法があります。これから選択範囲を推測するのは簡単です:)

注: 連続選択のみ可能です! osxでもiosでも、テキストフィールド/テキストビューのn部分を選択できません

于 2013-03-08T12:50:43.853 に答える