Как определить событие нажатия кнопки self.editButtonItem? - PullRequest
18 голосов
/ 07 сентября 2011

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

leftBarButton = self.editButtonItem;

Я хочу изменить некоторые свойства блокировки / включения других кнопок в зависимости от действия нажатия кнопки редактирования.

Как узнать, нажата ли кнопка «Редактировать» или нет?

Ответы [ 5 ]

34 голосов
/ 07 сентября 2011

Действие кнопки редактирования отправляет вашему контроллеру представления сообщение setEditing:animated. Переопределите это в своем подклассе для выполнения других действий при входе или выходе из режима редактирования.

Обязательно вызовите реализацию super в конце, чтобы управлять оставшейся частью перехода к представлению редактирования.

19 голосов
/ 08 сентября 2011

Итак, наконец, я получил решение ...

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

    [super setEditing:editing animated:animated];

    if(editing) {
        //Do something for edit mode
    }

    else {
        //Do something for non-edit mode
    }

}

Этот метод будет вызван без изменения исходного поведения кнопки self.editButtonItem.

7 голосов
/ 28 мая 2015

В Свифт:

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

   ....
    self.navigationItem.leftBarButtonItem = self.editButtonItem()
}

override func setEditing(editing: Bool, animated: Bool) {
    // Toggles the edit button state
    super.setEditing(editing, animated: animated)
    // Toggles the actual editing actions appearing on a table view
    tableView.setEditing(editing, animated: true)
}
3 голосов
/ 08 марта 2016

В Swift вы можете использовать следующие методы:

  @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.rightBarButtonItem = editButtonItem()
    }

   override func setEditing(editing: Bool, animated: Bool){

        super.setEditing(editing, animated: animated)
        tableView.setEditing(editing, animated: true)


    }
1 голос
/ 07 сентября 2011
UIBarButtonItem *barBut=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(doSomething)];


self.navigationItem.leftBarButtonItem=barBut;

[barBut release];


.h
-(void)doSomething;

.m 

-(void)doSomething{

    NSLog(@"dooooooooooooo");
        //ur stuff
}

Последнее обновление:

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

будет называться

editButtonItem

Returns a bar button item that toggles its title and associated state between Edit and Done.

- (UIBarButtonItem *)editButtonItem

Discussion
If one of the custom views of the navigationItem property is set to the returned object, the associated navigation bar displays an Edit button if editing is NO and a Done button if editing is YES. The default button action invokes the setEditing:animated: method.

    Availability
    Available in iOS 2.0 and later.

    See Also
    @property editing

    – setEditing:animated:


    Declared In
    UIViewController.h

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html

...