UITextView中撤消经理不更换属性串工作(iOS 6中)(UITextView undo ma

2019-09-22 15:42发布

iOS 6中已更新为使用UITextView的富文本编辑(一个UITextView现在挣的attributedText财产 - 其愚蠢非mutable-)。 这里有一个问题问及保密协议,iOS 6中苹果论坛的,可以作出公开,因为iOS 6的是现在已经上市了...

在一个UITextView,我可以撤消任何字体的变化,但不能撤销在视图的属性串的副本的替代品。 当使用此代码...

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

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

}

...撤消运作良好。

但是,如果我添加一行得到的结果在我看来可见,在UndoManager的不火的“替代:用”方法,因为它应该...

- (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];

}

任何想法? 我有任何的替代方法,同样的问题,采用了一系列与否,对于MutableAttributedString我试图上线“2”用...

Answer 1:

嗯,哇,我真的没有想到这个工作! 我无法找到一个解决办法,所以我刚开始尝试任何事情,一切...

- (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];
}


Answer 2:

撤消管理器设置它的“文本”或“attributedText”属性复位后,这就是为什么它不工作。 无论这种行为是bug还是设计我不知道。

但是,您可以使用UITextInput协议的方法来代替。

  • (空隙)replaceRange:(UITextRange *)范围withText:(的NSString *)文本

这工作。



文章来源: UITextView undo manager do not work with replacement attributed string (iOS 6)