#swift #uitableview #animation
#swift #uitableview #Анимация
Вопрос:
Надеюсь, у вас все хорошо!. Ну, у меня есть кнопка редактирования UIButton в правом верхнем углу, теперь, когда я нажимаю на нее, она становится обычным стилем редактирования. теперь, когда он переходит в режим редактирования, он просто быстро перемещает мою ячейку, я хотел бы сделать анимацию, чтобы просто плавно перемещать ее, как в приложении mail: (gif, который показывает приложение Apple Mail)
https://media2.giphy.com/media/4u8oHz6ymC7CyjJJCZ/giphy.gif
более того, я знаю, что есть метод willdisply, но дело в том, что я использую IBAction для кнопки редактирования 🙂 надеюсь, вы все понимаете мою точку зрения, с новым годом.
МОЙ КОД!:
import UIKit
class NotificationsViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var editButton: UIBarButtonItem!
@IBOutlet weak var toolBar: UIToolbar!
var arrayOfNotifications = [Notification]()
var selectedCounter = 0
override func viewDidLoad() {
super.viewDidLoad()
arrayOfNotifications = createArrayOfNotifications()
configureTableView()
self.navigationItem.titleView = setTitle(title: "Notifications", subtitle: "1 New")
//We hide the toolBar till we hit the "Edit"
toolBar.isHidden = true
configureUIButtons()
}
func configureTableView() {
tableView.dataSource = self
tableView.delegate = self
tableView.rowHeight = 80
}
func createArrayOfNotifications() -> [Notification] {
// Create Date
let date = Date()
// Create Date Formatter
let dateFormatter = DateFormatter()
// Set Date/Time Style
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .short
// Convert Date to String
let currentDate = dateFormatter.string(from: date) // September 9, 2020 at 12:24 PM
var tempNotificationsArr : [Notification] = []
let notification1 = Notification(image: UIImage(systemName: "message.fill")!, title: "Hello Aviad", date: currentDate, team: "In: Loopers")
tempNotificationsArr.append(notification1)
return tempNotificationsArr
}
// MARK: - UIBarButtonItem Creation and Configuration
func configureUIButtons() {
// let toolbarButtonItems = [
// customTitleBarButtonItem,
// flexibleSpaceBarButtonItem,
// deleteBarButtonItem
// ]
let toolbarButtonItems = [
markBarButtonItem, flexibleSpaceBarButtonItem, deleteBarButtonItem
]
toolBar.setItems(toolbarButtonItems, animated: true)
}
var deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)))
// var deleteBarButtonItem: UIBarButtonItem {
// let deleteBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Delete", style: .plain, target: self, action: #selector(NotificationsViewController.deleteButtonItemClicked(_:)));
//
// return deleteBarButtonItem
//
// }
var flexibleSpaceBarButtonItem: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
// var flexibleSpaceBarButtonItem: UIBarButtonItem {
// return UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
// target: nil,
// action: nil)
// }
var markBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Mark", style: .plain, target: self, action: #selector(NotificationsViewController.markButtonItemClicked(_:)))
//
// var markBarButtonItem: UIBarButtonItem = UIBarButtonItem(title: "Mark", image: nil, primaryAction: nil, menu: menuItems())
//
//
//
// var customTitleBarButtonItem: UIBarButtonItem {
// let markMenu = UIMenu(title: "", children: [
// UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
// print("Flag is pressed")
// },
// UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
// print("Mark as Unread is pressed")
// },
// ])
//
// return UIBarButtonItem(title: "Mark", menu: markMenu)
//
// }
// MARK: - Actions
@objc
func deleteButtonItemClicked(_ barButtonItem: UIBarButtonItem) {
print("Delete Button is clicked (barButtonItem).")
}
@objc
func markButtonItemClicked(_ barButtonItem: UIBarButtonItem ) -> UIMenu {
print("Mark is pressed")
let markMenu = UIMenu(title: "", children: [
UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
print("Flag is pressed")
},
UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
print("Mark as Unread is pressed")
},
])
return markMenu
}
func menuItems() -> UIMenu {
let markMenu = UIMenu(title: "", children: [
UIAction(title: "Flag", image: UIImage(systemName: "flag")) { action in
print("Flag is pressed")
},
UIAction(title: "Mark as Unread", image: UIImage(systemName: "envelope.badge")) { action in
print("Mark as Unread is pressed")
},
])
return markMenu
}
//TODO: - Pop up the tool bar, - Edit function
@IBAction func editAction(_ sender: UIBarButtonItem) {
if(self.tableView.isEditing == true)
{
self.tableView.isEditing = false
self.navigationItem.rightBarButtonItem?.title = "Edit"
toolBar.isHidden = true
}
else
{
tableView.allowsMultipleSelectionDuringEditing = true
self.tableView.isEditing = true
self.navigationItem.rightBarButtonItem?.title = "Cancel"
toolBar.isHidden = false
// deleteBarButtonItem.isEnabled = true
// customTitleBarButtonItem.isEnabled = true
toolBarAnimation()
}
}
Комментарии:
1. Пожалуйста, покажите нам свой код для
UITableView
редактирования. Может быть, даже немного подробнее, а не ссылка? Я комментирую это, потомуUITableView
что поставляется с режимом редактирования и анимацией! Не уверен, как они сравниваются с Mail.app, не говоря уже о различиях. Но это хорошая идея, чтобы показать, что вы пробовали, с более подробной информацией.2. @dfd Конечно, я добавляю свой код прямо сейчас! 🙂
Ответ №1:
Вместо того , чтобы
self.tableView.isEditing = true
используйте
self.tableView.setEditing(true, animated: true)
Комментарии:
1. Я использую его в setEditing, дело в том, что я хочу, чтобы ячейки были гладкими, как у Apple 🙂