UITextView 撤消管理器不适用于替换属性字符串(iOS 6)

2024-01-26

iOS 6 已更新为使用 UITextView 进行富文本编辑(UITextView 现在获得一个 attributeText 属性,该属性是愚蠢的不可变)。这是在 NDA 下在 iOS 6 Apple 论坛上提出的问题,由于 iOS 6 现已公开,因此可以公开该问题......

在 UITextView 中,我可以撤消任何字体更改,但无法撤消视图属性字符串副本中的替换。使用此代码时...

- (void) replace: (NSAttributedString*) old with: (NSAttributedString*) new

{
1.    [[myView.undoManager prepareWithInvocationTarget:self] replace:new with:old];
2.    old=new;

}

...撤消效果很好。

但是,如果我添加一行以使结果在我的视图中可见,则 undoManager 不会触发“replace:with:”方法,因为它应该......

- (void) replace: (NSAttributedString*) old with: (NSAttributedString*) new

{
1.    [[myView.undoManager prepareWithInvocationTarget:self] replace:new with:old];
2.    old=new;
3.    myView.attributedText=[[NSAttributedString alloc] initWithAttributedString:old];

}

任何想法?我对任何替换方法都有同样的问题,无论是否使用范围,对于我尝试在“2”行使用的 MutableAttributedString...


嗯,哇,我真的没想到这会起作用!我找不到解决方案,所以我开始尝试一切......

- (void)applyAttributesToSelection:(NSDictionary*)attributes {
    UITextView *textView = self.contentCell.textView;

    NSRange selectedRange = textView.selectedRange;
    UITextRange *selectedTextRange = textView.selectedTextRange;
    NSAttributedString *selectedText = [textView.textStorage attributedSubstringFromRange:selectedRange];

    [textView.undoManager beginUndoGrouping];
    [textView replaceRange:selectedTextRange withText:selectedText.string];
    [textView.textStorage addAttributes:attributes range:selectedRange];
    [textView.undoManager endUndoGrouping];

    [textView setTypingAttributes:attributes];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITextView 撤消管理器不适用于替换属性字符串(iOS 6) 的相关文章

随机推荐

  • 如何禁用 jquery 数据表中的显示条目属性

    我刚刚开始使用 jquery 我使用 jquery 数据表插件来启用表视图 我需要禁用显示条目属性 谁能帮助我在哪个js中我需要禁用该属性 我已关注此链接 但没有帮助 不知道要修改哪个js here http datatables net
  • QTreeView内存消耗

    我现在正在测试 QTreeView 功能 我对一件事感到惊讶 看来 QTreeView 内存消耗取决于项目计数 O O 这是非常不寻常的 因为这种类型的模型视图容器仅跟踪正在显示的项目 其余项目都在模型中 我用一个简单的模型编写了以下代码
  • Android 证书已更改?

    我最近格式化了我的计算机并更新到 Windows 7 我备份了我的密钥库并尝试用它签署我的 apk 但它给了我一个错误 说我的证书将在 22 年后过期 这仅低于市场上传 apk 的要求 所以现在我陷入无法更新我的应用程序 这怎么发生的 有没
  • Emacs 打开最近的文件很慢!

    直接打开文件时速度很快 但是当我打开最近激活的文件时 在我的文件中添加以下行 emacs require recentf recentf mode 1 setq recentf max menu items 25 global set ke
  • Actionscript 3:如何从外部类访问舞台上的元素?

    我的 as 文件中有一个外部类 我的问题是我无法访问舞台上的元素 像 stage txtfield text 或 this parent txtfield text 这样的代码不起作用 txtfield 是动态文本字段的实例名称 这在一定程
  • Laravel 注册表单上的自定义验证

    我目前正在努力对注册表进行一些验证 基本上 当用户注册时 它会检查他们输入的唯一代码是否有效 如果无效则不允许他们注册 但在我从中读取的代码表中 代码上也有一个到期日期 我需要在认为有效后再次检查到期日期尚未过去 换句话说 它不大于现在 我
  • 编写一个返回值的 jQuery 插件

    我正在编写一个 jQuery 插件 在某些情况下可以存储一些数据 我想以一种非常灵活的方式编写它 我可以更改输入参数来获取插件存储的一些值 解释 当我打电话时 any myPlugin 我的插件初始化创建一个div还有一些a里面 单击一个a
  • C++ 中的全局变量是存储在堆栈、堆还是两者都不存储?

    最初我很确定正确的答案一定是 都不是 因为全局变量存储在数据内存中 但后来我找到了 Robert Lafore 的这本书 名为 C 中的面向对象编程 它明确指出 根据C 标准 全局变量存储在堆上 现在我很困惑 无法真正弄清楚所提出问题的正确
  • 如何在表单完成期间设置外键(python/django)

    在表单处理期间 我希望能够在模型对象上设置外键字段 而无需用户从下拉列表中选择键 例如 models py class AAA models Model some field models TextField class BBB model
  • where 0=0 这样的条件的确切含义是什么?

    我在 Oracle 过程中使用 where 0 0 这样的语句时有点困惑 有人可以澄清一下吗 即使我们这样做是为了动态选择 为什么即使我们在查询中附加了实际条件 也要添加这条语句呢 这个 where 条件会对结果集产生任何影响吗 我经历了如
  • LINQ 中的 GETDATE()

    替代品是什么GETDATE 在 LINQ 中 我从以下帖子中得到了一些解决方法 如何在 Linq to SQL 表达式中使用 SQL 的 GETDATE 和 DATEADD https stackoverflow com questions
  • 如何在 EasyNetQ 中为每个消费者声明自定义错误交换?

    我有四个消费者 当错误发生时 消息发布到默认的 EasyNetQ Default Error Queue 是否可以让每个队列消费者编写自己的错误交换 例如 Queue Name A ErrorExchange A ErrorExchange
  • 未定义 navigator.push React-native 0.43.4

    我正在使用react native的Navigator组件 但当我想推送到anthor页面时仍然出现错误push undefined is not a function这是我的代码 import React Component from r
  • Google 地图路径的 SVG 渐变线

    我正在解释谷歌地图中的 GPS 位置数据 在这里我想创建一条带有渐变的路径 该路径以红色开始 以橙色结束 this https developers google com maps documentation javascript exam
  • std::function 可以序列化吗?

    这是一个理论问题 假设有一些对象 其中包含订阅这些对象的事件的回调函数列表 现在我们想将这些对象存储在磁盘上 是一个std function可序列化 No 每当使用类型擦除 即 将实现细节隐藏在接口后面 时 在不知道对象的动态类型的情况下唯
  • 如何将文本放入绘图的方框内

    我想将文本放在 matplotlib 图上的框中 但是文档 http matplotlib org users recipes html placing text boxes仅给出如何将其放在右上角的示例 并且选择不同的角并不完全简单 这是
  • 将 json 字符串转换为 Java Map(JSONLib)

    如何使用 JSON lib http json lib sourceforge net 将 json 字符串转换为 Java Map 我可以转换为 DynaBean JSONObject jsonObject JSONObject JSON
  • Scanf 似乎无法在带有 GDB 的 Eclipse CDT 中以调试模式工作

    在调试模式下运行此代码时 include
  • 如何在 Django 中使用 DeleteView 显示相关项目?

    我正在做一个视图来从模型中删除实例 使用 Django 中的通用视图DeleteView 但它会级联并删除其他模型中的实例 url r person P
  • UITextView 撤消管理器不适用于替换属性字符串(iOS 6)

    iOS 6 已更新为使用 UITextView 进行富文本编辑 UITextView 现在获得一个 attributeText 属性 该属性是愚蠢的不可变 这是在 NDA 下在 iOS 6 Apple 论坛上提出的问题 由于 iOS 6 现