Ich habe eine schnelle App basierend auf Master-Detail
Vorlage. Jede Zeile in der Tabelle MasterView
basiert auf einer benutzerdefinierten Zelle, die von einer Schreibfeder empfangen wurde. Jede Zelle enthält UIlabel
und UIbutton
. Die Logik der App folgt. Wenn der Benutzer auf eine Zeile tippt, zeigt DetailView
je nach ausgewählter Zeile einige Details an. Die Schaltfläche in der Zeile ruft tableView(_, didSelectRowAtIndexPath)
nicht auf. Wenn der Benutzer auf die Schaltfläche innerhalb einer Zeile klickt, sollte nur ein Bild zu DetailView
geändert werden (andere Elemente auf DetailView
bleiben gleich), aber es ist nicht. Wenn ich eine andere Zeile auswähle und dann die vorherige Zeile zurück wähle, wird das geänderte Bild auf der DetailView
angezeigt, wie es vorhergesehen wurde. Die Frage ist, wie man das Bild in der DetailView
nur durch Tippen auf die Schaltfläche neu zu zeichnen. Ich habe versucht, folgendes zu tun, aber ohne Erfolg:So aktualisieren Sie DetailView
class MasterViewCell: UITableViewCell {
weak var detailViewController: DetailViewController?
@IBAction func buttonTap(sender: AnyObject) {
//method to set new image
detailViewController!.setNewImage()
detailViewController!.view.setNeedsDisplay()
}
}
class MasterViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "itemCell", bundle: nil)
tableView.registerNib(nib, forCellReuseIdentifier: "Cell")
if let split = self.splitViewController {
let controllers = split.viewControllers
self.detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? MasterViewCell
cell?.detailView = self.detailViewController
return cell!
}
Während Ihre Methode korrekt ist, verwenden wir oft keine Delegationen für Master-> Detailkommunikation. Wir verwenden Delegationen, wenn die Detailansicht ** mit dem Master ** sprechen möchte. –
@RayTso, stimme ich zu. Aber für dieses spezifische Problem scheint es die beste Lösung zu sein. –
Sie *** do *** wissen, ich spreche über Übergänge? –