gpt4 book ai didi

iphone - UITextView 在属性更改时未触发 textViewDidChange?

转载 作者:行者123 更新时间:2023-12-03 19:30:30 25 4
gpt4 key购买 nike

我有一个使用委托(delegate)配置的 UITextView。我已通过将 allowsEditingTextAttributes 设置为 YES 来启用编辑属性。

当用户在 TextView 中键入字符时,委托(delegate)会收到 textViewDidChange: 消息。

但是当用户更改属性(例如进行选择并点击粗体或斜体)时,不会出现 textViewDidChange: 消息。

文档特别指出 textViewDidChange:当用户更改属性时应该收到一条消息:

Tells the delegate that the text or attributes in the specified text view were changed by the user.

但这对我不起作用。我在这里缺少什么?

最佳答案

我在 iOS 6 中测试了此场景,并得到了完全相同的结果:“选择”弹出窗口中的属性更改没有触发 textViewDidChange: 方法。这似乎是一个错误,或者文档需要澄清什么类型的属性更改会触发此事件。

一个可能的解决方法是实现 textViewDidChangeSelection: 方法。每当做出选择(用户在更改属性之前必须执行此操作)时都会调用它。检查 selectedRange.length 是否 > 0(这意味着已选择实际单词,而不是仅仅移动光标),然后保存该 selectedRange。一旦长度再次为零,则意味着他们取消选择该项目。那时,您可以采用先前的范围并处理文本。

- (void)textViewDidChangeSelection:(UITextView *)textView
{
static BOOL rangeSet = NO;
static NSRange mySelectedRange;
if( textView.selectedRange.length > 0 && !rangeSet )
{
mySelectedRange = textView.selectedRange;
rangeSet = YES;
}
else if( textView.selectedRange.length == 0 && rangeSet)
{
// Work with text
NSLog(@"Working with previously select text: %d, %d", mySelectedRange.location, mySelectedRange.length);
}
}

关于iphone - UITextView 在属性更改时未触发 textViewDidChange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13060868/

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