setEditing: animated: отсутствует анимация? - PullRequest
1 голос
/ 07 ноября 2011

Я столкнулся с проблемой при программировании iOS: когда я пытался создать свою пользовательскую кнопку редактирования для моего 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]; 
} 

} 

1 Ответ

2 голосов
/ 07 ноября 2011

Я не думаю, что назначаемые вами селекторы могут отправлять два аргумента:

@selector(setEditing:animated:)

Действие кнопки обычно просто отправляет либо без аргументов, либо само в качестве аргумента (обычно (id)sender). Поэтому то, что вы делаете, вероятно, интерпретируется как отправка NO в качестве второго аргумента (поэтому animated = NO).

Вы должны добавить новый метод, например, так:

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

И установите действие на своих кнопках:

@selector(toggleEditing)

EDIT

ОК, вот вам более подробный код.

Для начала, ваш исходный пример кода должен быть в 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"];
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...