gpt4 book ai didi

ios - 从 textField 中选择粗体和斜体文本

转载 作者:可可西里 更新时间:2023-11-01 17:09:07 25 4
gpt4 key购买 nike

如何只选择用户在 textField/textView 中输入的粗体斜体 文本?

我们可以将选定的文本设为粗体斜体、下划线以及这三者的任意组合,但反之亦然。

*这不是特定于 Mac OSX 或 iOS,任何一种解决方案都适合我。

编辑:

我尝试将属性字符串中的文本读取为:

NSAttributedString *string=self.textView.string;

但是当 textView 和 textField 返回 NSString 时,所有格式都消失了。

最佳答案

在 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 上都不能选择文本字段/ TextView 的 n 个部分

关于ios - 从 textField 中选择粗体和斜体文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15294179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com