【问题标题】:setEditing:animated: is missing animation?setEditing:animated: 缺少动画吗?
【发布时间】:2011-11-08 04:50:52
【问题描述】:

我在编写 iOS 时遇到了一个问题:当我尝试为我的 tableView 制作自定义编辑按钮时,我无法让它动画化。下面是我如何初始化 tableview:

- (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 而不是我的 addButton 时,编辑模式是动画的。这是我的 setEditing:animated: 方法。我可以让我的表格视图进入编辑模式,插入按钮立即出现在左侧。我试过[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]; 
} 

} 

【问题讨论】:

    标签: iphone objective-c ios uitableview


    【解决方案1】:

    我认为您分配的选择器不能发送两个参数:

    @selector(setEditing:animated:)
    

    按钮操作通常只是不发送参数,或者将自身作为参数发送(通常是(id)sender)。所以你所做的可能被解释为发送 NO 作为第二个参数(所以animated = NO)。

    你应该像这样添加一个新方法:

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

    并在您的按钮上设置操作:

    @selector(toggleEditing)
    

    编辑

    好的,这里有一些更详细的代码。

    对于初学者,您的初始代码示例应位于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"];
        } 
    }
    

    【讨论】:

    • 尝试删除 reloadRows.. 调用,它们有什么用?它们会立即替换单元格,因此可能会在您的动画完成之前发生。
    • 是的,我已经删除了这些行。我应该修改我的 [super setEditing:NO animated:YES]; ??我只想在我的导航栏上制作一个自定义的编辑按钮。或者我在哪里可以找到一些易于理解的代码?
    • 仍然无法解决问题。你能给我一个完整的代码吗?非常感谢!!!
    猜你喜欢
    • 2013-07-23
    • 2015-05-15
    • 1970-01-01
    • 2013-06-09
    • 2017-03-28
    • 2016-07-06
    • 1970-01-01
    • 2015-12-16
    • 2012-06-24
    相关资源
    最近更新 更多