iOS開發-NSUndoManager撤銷(undo)和重做(redo)

來源:互聯網
上載者:User

標籤:

程式開發中我們經常會用到的兩個快速鍵Ctrl+Z和Ctrl+C,撤銷和複製,Cocoa開發也可以實現這兩個操作,為我們提供非常簡單的操作類NSUndoManger,也可以稱之為撤銷管理器,NSUndoManger內部維護兩個棧,undo棧和redo棧。建立一個可撤銷的操作需要建立一個逆向的操作,然後通過逆向的操作達到做出對應的改變,實現起來非常簡單。

首先我們來看一個非常簡單的例子:

        Message  *msg=[[Message alloc]init];        [msg addObjectMethod:@"FlyElephant"];        [msg addObjectMethod:@"http://www.cnblogs.com/xiaofeixiang/"];        NSLog(@"%@",msg.mutableArr);        [msg.undoManger undo];//取消        NSLog(@"%@",msg.mutableArr);        [msg.undoManger redo];//重做        NSLog(@"%@",msg.mutableArr);

 

Message類中可變數組屬性mutaleArr,先來觀察一下結果,可以思考一下是如何?的:

數組初始化元素為init,之後我們新增兩個新元素,這個時候通過undo取消了新加入的元素,之後我們通過redo將刪除的元素又重新加入到了數組中;

-(void)addObjectMethod:(NSString *)str{    [[self.undoManger prepareWithInvocationTarget:self] removeObjectMethod:str];//逆向刪除    [self.mutableArr addObject:str];}-(void)removeObjectMethod:(NSString *)str{    [[self.undoManger prepareWithInvocationTarget:self] addObjectMethod:str];//逆向添加    if ([self.mutableArr containsObject:str]) {        [self.mutableArr removeObject:str];    }}

如果細心會發現我們在兩個對應的方法中都加入了對應的逆向操作,如果你只需要取消,那麼在removeObjectMethod方法中,不需要進行逆向操作,當然使用redo方法時也就不能執行,具體可以根據的需求而定;

撤銷管理器記錄的操作有三個方法:

- (id)prepareWithInvocationTarget:(id)target;- (void)registerUndoWithTarget:(id)target selector:(SEL)selector object:(nullable id)anObject;- (void)registerUndoWithTarget:(id)target handler:(void (^)(id target))undoHandler NS_AVAILABLE(10_11, 9_0) NS_REFINED_FOR_SWIFT;
prepareWithInvocationTarget是我們使用的,當然你可以通過registerUndoWithTarget:(id)target selector:(SEL)selector object:(nullable id)anObject來使用,registerUndoWithTarget:hanlder通過block的形式進行傳遞修改, 不過需要在iOS9中才可以使用,使用的時候避免造成保留環~

iOS開發-NSUndoManager撤銷(undo)和重做(redo)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.