Ich habe ein Modellobjekt namens PlayerStore
, das ein Array von Player
Objekten ist. Diese werden zum MainVC
View Controller UITableView
hinzugefügt. Hier kann ein Benutzer Player
Objekte hinzufügen, die in UITableView
angezeigt werden.Eine UIView anzeigen, wenn eine Variable eine Bedingung erfüllt
Ich habe ein UILabel
, dass ein @IBOutlet
pressPlusLbl
genannt ist, dass ich nur angezeigt werden soll, wenn gibt es keine in den PlayerStore
links Spieler.
ich umgehen kann, dass leicht, wenn die Sicht Belastungen in ViewDidLoad
mit so etwas wie:
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
}
}
Aber ich meiner Ansicht-Controller immer wollen die Modellobjekte (PlayerStor) zu hören zu wissen, wann es leer ist: !store.hasPlayers()
so dass ich die pressPlusLbl
wieder anzeigen kann.
EDIT 1:
Weiß nicht, ob es relevant ist, aber hier ist einer der Orte, der Benutzer aus dem Tableview löschen:
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: Mit Blick auf Implementieren Sie ein Delegatenmuster aus dem PlayerStore
. Hier ist, was ich gebaut habe, aber nicht funktioniert.
in MainVC.Swift
(View-Controller) mit meinem vorhandenen Protokoll:
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
}
}
}
Im PlayerStore.swift
(Modell)
class PlayerStore {
...
var delegate: PlayerIncrementor!
private var _playerArray = [Player]()
func hasPlayers() -> Bool {
return !_playerArray.isEmpty
}
...
}
Wie wird die 'tableView' benachrichtigt, dass der Benutzer den' player' löscht –
@ New16 den Code hinzugefügt. – Macness
@Macness Bitte überprüfen Sie meine Antwort und antworten Sie – KSR