2015-03-17 3 views
4

В моем представлении таблицы я хочу, чтобы определенные ячейки могли перемещаться влево для некоторых опций, основанных на условии. Остальные ячейки должны вести себя так, как будто commitEditingStyle отключен. Это возможно?Можно ли отключить commitEditingStyle программно?

С помощью приведенного ниже кода я могу добавить действия, когда выполняются условия, но другие ячейки по-прежнему получают действие «удалить» по умолчанию. Как я могу избавиться от этого действия удаления?

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
} 

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? { 

    let object = items[indexPath.row] 
    if object.name == "name" { 

     // someAction 
     var addAction = UITableViewRowAction(style: .Default, title: "+") { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in 
     } 
     return [addAction] 
    } 
    return nil 
} 

С помощью приведенного ниже кода мне удалось включить или отключить действия. Но только с кнопкой Delete.

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { 

    let object = items[indexPath.row] 
    if object.name == "joyce" { 
     return UITableViewCellEditingStyle.Delete 
    } else { 
     return UITableViewCellEditingStyle.None 
    } 
} 

ответ

2

Похоже, что вы ищете optional func tableView(_ tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool.

яблочная документации:

Метод позволяет источник данных, чтобы исключить отдельные строки из рассматривается как редактируемые. Редактируемые строки отображают управление вставкой или удалением в своих ячейках. Если этот метод не выполнен , все строки предполагается редактируемыми.

+0

Я забыл добавить, что я могу управлять, чтобы делать то, что я хочу, но только с получением по умолчанию удалить действие с кодом 'переопределения Func Tableview (Tableview: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { LET объект = пункты [indexPath.row] если object.name == "имя" { возвращение UITableViewCellEditingStyle.Delete } еще { возвращение UITableViewCellEditingStyle.None } } 'можно ли использовать что-то похожее на это? –

+0

Если вы отключите редактирование строк, которые не соответствуют вашему состоянию, какая разница между тем и тем, что вы хотите? –

+0

Извините, у меня было условие двойное. Получилось замешательство, пытаясь разобраться в течение нескольких часов и смешать некоторые вещи: с, спасибо в любом случае! –

5

Вам понадобится способ определения редактируемого состояния на основе вашей модели данных. Например:

class Message 
{ 
    var subject : String 
    var title : String 
    var isEditable : Bool 

    init(subject: String, title: String) 
    { 
     self.subject = subject 
     self.title = title 
     self.isEditable = true 
    } 
} 

С этим, вы можете легко обрабатывать метод tableView:canEditRowAtIndexPath: делегата. Ваше мнение контроллер должен выглядеть следующим образом:

class ViewController : UIViewController, UITableViewDataSource, UITableViewDelegate 
{ 
    var tableView : UITableView! 
    var messages : [Message] 

    // MARK: - UITableView Delegate 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return self.messages.count 
    } 

    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
    { 
     let message = self.messages[indexPath.row] 
     return message.isEditable 
    } 
} 

В некоторых более сложных примерах может быть вычислен собственность, но общая концепция та же.