gpt4 book ai didi

ios - 如何允许将 NSAttributedString 文本输入到 UITextView 中?

转载 作者:技术小花猫 更新时间:2023-10-29 10:41:31 26 4
gpt4 key购买 nike

我正在尝试允许将不同样式的文本输入到 UITextView 中,这有点像使用粗体或斜体等简单属性的文本编辑器。我了解到,通过使用 textView 的 attributedText 属性,我可以将属性应用于特定范围的文本。这很好,但我希望能够将属性文本键入 textView,这将通过按钮切换(例如键入粗体文本)。

到目前为止,这是我的想法:

我使用 -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text UITextView 委托(delegate)方法获取 text 参数,并通过创建具有相同文本的 NSAttributedString 来使用属性修改它。然后创建一个 NSMutableAttributedString,它是 textView 的 attributedText 的副本。使用 appendAttributedString 附加两者,然后将 textView 的 attributedText 属性设置为生成的 attributedString。

代码如下:

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

if (self.boldPressed) {

UIFont *boldFont = [UIFont boldSystemFontOfSize:self.textView.font.pointSize];
NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithString:text attributes:boldAttr];
NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText];
[textViewText appendAttributedString:attributedText];
textView.attributedText = textViewText;

return NO;
}
return YES;
}

每次键入字符时都必须重置 textViews attributedText 对于一个简单的操作来说似乎有点繁琐。不仅如此,它还不能正常工作。这是启用粗体属性时的样子:

attributedText issues

这有两个问题。最明显的是如何将每个新角色放到新的一行中。但同样奇怪的是,插入点始终位于 TextView 中文本的第一个索引处(仅当启用粗体时,粗体字符才会插入新行)。因此,如果您在启用粗体的情况下输入,然后关闭粗体,则在所有现有文本前面输入简历。

我不确定为什么会发生这些错误。我也不认为我的解决方案非常有效,但我想不出任何其他实现方式。

最佳答案

这就是 setTypingAttributes: 的用途。每当用户按下您的属性按钮之一时,将此设置为您的属性字典,新字符将获取请求的属性。

关于ios - 如何允许将 NSAttributedString 文本输入到 UITextView 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423632/

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