2011-11-07 51 views
1

我在编程iOS时遇到了一个问题:当我尝试为我的tableView制作自定义编辑按钮时,我无法将其设置为动画。下面是我的初始化实现代码如下:setEditing:animated:缺少动画?

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    myTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain]; 
    myTableView.delegate = self; 
    myTableView.dataSource = self; 

    myTableView.autoresizesSubviews = YES; 

    ....... 

    self.view = myTableView; 

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(setEditing:animated:)];  
    self.navigationItem.rightBarButtonItem = addButton; 
    [addButton release]; 
} 

然而,当我用self.editButtonItem而不是我的Add按钮,编辑模式是动画。这是我的setEditing:animated:方法。我可以让我的tableview进入编辑模式,插入按钮立即出现在左边。我试过[myTableView reloadRowsAtIndexPaths:[myTableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic]; 但它在iOS 4.3上没有帮助。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated{ 

if(self.editing){ 
    [super setEditing:NO animated:YES]; 
    [myTableView reloadRowsAtIndexPaths:[myTableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    [myTableView reloadData]; 
    self.navigationItem.title = [selectedCellItem valueForKey:@"name"]; 
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(setEditing:animated:)]; 
    self.navigationItem.rightBarButtonItem = addButton; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
    [addButton release]; 
} 
else { 
    [super setEditing:YES animated:YES]; 
    [myTableView reloadRowsAtIndexPaths:[myTableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    self.navigationItem.title = @"Add to Favourites"; 
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(setEditing:animated:)];  
    self.navigationItem.rightBarButtonItem = doneButton; 
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
    [doneButton release]; 
    [myTableView reloadData]; 
} 

} 

回答

2

我不认为你是分配选择能够发送两个参数:

@selector(setEditing:animated:) 

一个按钮动作通常只发送要么没有参数,或者本身作为一个参数(通常为(id)sender) 。所以你在做什么可能被解释为发送NO作为第二个参数(所以animated = NO)。

您应该添加一个新的方法,像这样:

-(void)toggleEditing 
{ 
    [self setEditing:!self.isEditing animated:YES]; 
} 

,并设置你的按钮的操作:

@selector(toggleEditing) 

编辑

OK,这里是一些更详细的代码为你。

对于初学者来说,你最初的代码示例应在viewDidLoad而不是viewWillAppear。它应该是这个样子:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    .... code where you set up the table view... 

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(toggleEditing)];  
    self.navigationItem.rightBarButtonItem = addButton; 
    [addButton release]; 
} 

setEditing方法应该是这样的:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 
    if (editing) 
    { 
     // We are changing to edit mode 
     UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(toggleEditing)];  
     self.navigationItem.rightBarButtonItem = doneButton; 
     [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 
     [doneButton release]; 
     self.navigationItem.title = @"Add to Favourites"; 
    } 
    else 
    { 
     // We are changing out of edit mode 
     self.navigationItem.title = [selectedCellItem valueForKey:@"name"]; 
     UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(toggleEditing)]; 
     self.navigationItem.rightBarButtonItem = addButton; 
     [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain]; 
     [addButton release]; 
     self.navigationItem.title = [selectedCellItem valueForKey:@"name"]; 
    } 
} 
+0

对不起,我已经试过了,但还是没有用=( – Yangrui

+0

尝试取出reloadRows ..电话,它们是什么,因为他们会立即更换电池,因此可以发生在你的动画完成 – jrturton

+0

是的,我已经删除了我行应修改我的[超级setEditing:NO动画:是];?。??我只是想在我的导航栏上制作一个自定义编辑按钮或者我可以在哪里找到一些易于理解的代码? – Yangrui