Swift: действие Swipe для зачеркивания строки в TableView - PullRequest
0 голосов
/ 18 мая 2019

Вечерние дамы и господа, В настоящее время я привыкаю к ​​Swift и хочу начать с небольшого приложения todo. Пока что я могу добавить элемент и безопасно его сохранить в контексте. Когда элемент будет добавлен, он будет показан в виде таблицы. Теперь я хочу использовать проверку, чтобы зачеркнуть элементы, которые были добавлены, и сохранить эту информацию в моем контексте. Удаление с помощью прокрутки работает отлично.

Кто-нибудь знает, как это реализовать? Я пытался решить это сам, но не мог сделать это. Подобный вопрос уже задавался здесь ранее, но не получил правильного ответа: Добавить зачеркивание в строку просмотра таблицы с помощью пролистывания

func checkAccessoryType(cell: UITableViewCell, isCompleted: Bool) {
    if isCompleted {
        cell.accessoryType = .checkmark

    } else {
        cell.accessoryType = .none
    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let todo = CoreDataManager.shared.getTodoItem(index: indexPath.row)
    todo.completed = !todo.completed
    CoreDataManager.shared.safeContext()

    if let cell = tableView.cellForRow(at: indexPath){
        checkAccessoryType(cell: cell, isCompleted: todo.completed)
    }
}

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

Предполагая, что вы пытаетесь зачеркнуть заголовок вашей задачи - который должен быть определен как метка - вот подход, который нужно предпринять:

1- Убедитесь, что для вашей метки задан скорее текстчем обычный.Чтобы сделать это, перейдите на Main.storyboard, выберите свою метку и в инспекторе атрибутов установите для текста значение Attributed.

2- Внутри вашего блока завершения (то есть блока завершения, выполненного после пролистывания) добавьтеследующий код:

( SWIFT 5 )

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: taskLabel.text)
attributeString.addAttribute(.strikethroughStyle, value: 1, range: NSRange(location: 0, length: taskLabel.text.count))
taskLabel.attributedText = attributeString

Просто небольшой совет: всегда полезно добавлять код при задании вопроса.Дайте мне знать, если что-то не имеет смысла.

0 голосов
/ 30 мая 2019

При просмотре ссылки, которую вы указали, вам нужно Размах на вашем UITableViewCell.

Попробуйте заглянуть в:

  • leadingSwipeActionsConfigurationForRowAt
  • trailingSwipeActionsConfigurationForRowAt

Вам нужно это действие, чтобы выполнить зачеркнутую метку или удалить:

func tableView(_ tableView: UITableView,
                leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
 {
     let closeAction = UIContextualAction(style: .normal, title:  "Close", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
             print("OK, marked as Closed")
             success(true)
         })
         closeAction.image = UIImage(named: "tick")
         closeAction.backgroundColor = .purple

         return UISwipeActionsConfiguration(actions: [closeAction])

 }

 func tableView(_ tableView: UITableView,
                trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
 {
     let modifyAction = UIContextualAction(style: .normal, title:  "Update", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
         print("Update action ...")
         success(true)
     })
     modifyAction.image = UIImage(named: "hammer")
     modifyAction.backgroundColor = .blue

     return UISwipeActionsConfiguration(actions: [modifyAction])
 }

Left Swipe

Right Swipe

Источник: https://developerslogblog.wordpress.com/2017/06/28/ios-11-swipe-leftright-in-uitableviewcell/

...