Как дать различным tableViews одно и то же действие между ViewControllers [swift] - PullRequest
1 голос
/ 24 января 2020

У меня есть приложение с несколькими контроллерами представления с табличным представлением в каждом из них. Каждая таблица контроллера представления имеет свое собственное заданное c назначение, но я использую одни и те же действия смахивания в каждой таблице. До сих пор я только что копировал и вставлял один и тот же код для trailingSwipeActionsConfigurationForRowAt и leadingSwipeActionsConfigurationForRowAt в каждой таблице. Это неправильно, и я знаю, что должен быть способ, которым я мог бы написать код один раз и использовать его во всем приложении, но я не уверен, как это сделать.

Я пытался использовать расширения UITableView, но не могу использовать функции trailingSwipeActionsConfigurationForRowAt или leadingSwipeActionsConfigurationForRowAt в файле расширений. Чего мне не хватает?

Вот код для trailingSwipeActionsConfigurationForRowAt, который нужно просто удалить:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let action = UIContextualAction(style: .destructive, title: "") { (action, view, completionHandler) in

            if let item = self.dataSource.itemIdentifier(for: indexPath) {
                CoreDataManager.sharedManager.deleteItem(item)
            }

            completionHandler(true)
        }

        action.image = UIImage(named: "deleteSymbol")

        let configuration = UISwipeActionsConfiguration(actions: [action])
        return configuration
    }

Ответы [ 3 ]

2 голосов
/ 24 января 2020
  • Вы объявляете нижеприведенную функцию как глобальную функцию для проекта и получаете доступ к любой, где хотите
  • Вы можете изменить функцию, добавив параметр, который вы хотите использовать при нажатии кнопки. просто добавьте параметр в функцию и передайте данные при вызове

    func getSwipeAction(indexpath : IndexPath)-> UISwipeActionsConfiguration{
         let action = UIContextualAction(style: .destructive, title: "") { (action, 
        view, completionHandler) in
    
        completionHandler(true)
     }
    
     action.image = UIImage(named: "deleteSymbol")
    
     let configuration = UISwipeActionsConfiguration(actions: [action])
     return configuration
    }
    
0 голосов
/ 24 января 2020

Вы можете определить протокол как BaseTableViewProtocol , и в расширении этого протокола вы можете написать свой код. Поэтому, когда вы расширяете свой класс tableView из этого протокола, вы можете использовать функцию. Например,

      protocol BaseTableViewProtocol { } 

      extension BaseTableViewProtocol { 
         func trailingSwipeActionsConfigurationForRowAt() {
            //Something goes here
        }

         func leadingSwipeActionsConfigurationForRowAt() {
            //Something goes here
        }
      }
0 голосов
/ 24 января 2020

Вы можете добавить этот внутренний код в функцию расширения UITableView и попытаться использовать его таким образом. Вы должны реализовать trailingSwipeActionsConfigurationForRowAt или leadingSwipeActionsConfigurationForRowAt в каждом из ваших контроллеров представления.

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    return self.YourFunctionNameInExtension()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...