У меня есть объект модели, называемый PlayerStore
, который представляет собой массив объектов Player
. Они добавляются в контроллер MainVC
для просмотра UITableView
. Здесь пользователь может добавить Player
объектов, которые отображаются в UITableView
.Показать UIView, когда переменная соответствует условию
У меня есть UILabel
, который является @IBOutlet
называется pressPlusLbl
, что я хочу, чтобы отображать только когда нет игроков осталось в PlayerStore
.
Я могу справиться с этим легко, когда вид нагрузки в ViewDidLoad
с чем-то вроде:
override func viewDidLoad() {
super.viewDidLoad()
players = store.getAllPlayers()
emptyTableShowsLabel()
}
func emptyTableShowsLabel(){
if !store.hasPlayers(){
pressPlusLbl.isHidden = false
// TODO: maybe animate this view?
// TODO: hide the table
} else {
pressPlusLbl.isHidden = true
// TODO: bring back the table
}
}
Но я всегда хочу, чтобы мой взгляд контроллер для прослушивания объектов модели (PlayerStore), чтобы знать, когда он пуст: !store.hasPlayers()
так что я могу снова отобразить pressPlusLbl
.
EDIT 1:
Не знаю, если это уместно, но вот один из тех мест, пользователь может удалить из TableView:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if (editingStyle == .delete){
store.deletePlayer(row: indexPath.row)
players = store.getAllPlayers()
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.bottom)
}
}
EDIT 2: Заглядывая реализовать шаблон делегата из PlayerStore
. Вот что я имею, что строит, но не совсем работает.
в MainVC.Swift
(View Controller) с помощью моих существующих протоколов:
protocol PlayerIncrementor {
func increment(playerPosition: Int)
func decrement(playerPosition: Int)
func isStoreEmpty()
}
class MainVC: UIViewController, UITableViewDataSource, UITableViewDelegate, PlayerIncrementor {
...
func isStoreEmpty() {
store.delegate = self
if store.hasPlayers() {
pressPlusLbl.isHidden = true
} else {
pressPlusLbl.isHidden = false
}
}
}
В PlayerStore.swift
(модель)
class PlayerStore {
...
var delegate: PlayerIncrementor!
private var _playerArray = [Player]()
func hasPlayers() -> Bool {
return !_playerArray.isEmpty
}
...
}
Как «tableView» получает уведомление о том, что пользователь удалил «player» –
@ New16, добавил код. – Macness
@Macness Пожалуйста, проверьте мой ответ и ответ – KSR