2012年5月31日 星期四

NSUndoManager

目的:由NSUndoManager來實作Undo/redo功能

Step 1.  畫面上拉三個按鈕分別為add,redo及undo,數值label,textfield


 Step 2.ViewController.h
@interface ViewController : UIViewController
{
    NSUndoManager *manager;
    IBOutlet UITextField *txtShow;
    int value;
}

@property (nonatomic ,retain) IBOutlet UITextField *txtShow;

-(IBAction)add:(id)sender;
-(IBAction)redo:(id)sender;
-(IBAction)undo:(id)sender;


-(void)addAction;
-(void)removeAction;

@end

Step 3.關聯


Step 4.ViewController.m
@synthesize txtShow;

//增加
-(IBAction)add:(id)sender {
    [self addAction];
}
//重做
-(IBAction)redo:(id)sender {
    [manager redo];
}
//復原
-(IBAction)undo:(id)sender{
    [manager undo];
}

//增加
-(void)addAction {
    value++;
    [txtShow setText:[NSString stringWithFormat:@"%d", value]];
    [[manager prepareWithInvocationTarget:self] removeAction];
}
//減少
-(void)removeAction{
    value--;
    [txtShow setText:[NSString stringWithFormat:@"%d", value]];
    [[manager prepareWithInvocationTarget:self] addAction];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
   
    manager = [[NSUndoManager alloc] init];
    [txtShow setText:[NSString stringWithFormat:@"0"]];
}