2017-01-14 2 views
0

Ich habe gemeinsame List-Detail-App. TableView zum Anzeigen des Index von Elementen und Details von ViewController, die einzelne Elemente mit mehr Details anzeigen.Wiederverwendung der gleichen Ansicht in Liste und Detail ViewController

List: 

+-----------------+ 
|     | 
|  IMAGE 1  | 
|     | 
+-----------------+ 
|button1 button2 | 
|=================| 
|     | 
|  IMAGE 2  | 
|     | 
+-----------------+ 
|button1 button2 | 
|=================| 
|  .  | 
|  .  | 
|  .  | 


Detail: 
+-----------------+ 
|     | 
|  IMAGE 1  | 
|     | 
+-----------------+ 
| some text  | 
+-----------------+ 
|button1 button2 | <= same actions/handlers as in list 
|=================| 

Beide haben eine Symbolleiste mit mehreren Tasten (wie, speichern, etc). Wie kann man die Logik dieser Schaltflächenleiste wiederverwenden?

Antwort

1

Wahrscheinlich möchten Sie diese Funktionen (speichern, wie usw.) zu der Klasse hinzufügen, die die Daten enthält (Bild, Text usw.). Sie können die Funktion dann von überall aufrufen, und Sie werden das gleiche tun. Zum Beispiel:

class Post { 
    var image: UIImage? 
    var text: String? 

    func save() { 
     // Put your code here to save the 'Post' 
    } 

    func like() { 
     // Put your code here to like the 'Post' 
    } 
} 

Für ihre UIView und UITableViewCell Sie können eine ähnliche Sache tun, um ein und extension unter Verwendung. Zum Beispiel:

protocol UpdateState { 
    var myImageView: UIImageView? { get } 
    var myTextLabel: UILabel? { get } 
    func save() 
    func like() 
} 

extension UpdateState { 

    func save() { 
     // Put your code here to save the 'Post' 
     myTextLabel?.text = "New text after save" 
     myImageView?.image = UIImage(named: "SavedImage") 
    } 

    func like() { 
     // Put your code here to like the 'Post' 
     myTextLabel?.text = "New text after like" 
     myImageView?.image = UIImage(named: "NewImage") 
    } 
} 

class Cell: UITableViewCell, UpdateState { 
    @IBOutlet weak var myImageView: UIImageView? 

    // This is here to conform to the UpdateState protocol 
    var myTextLabel: UILabel? = nil 
} 

class View: UIView, UpdateState { 
    @IBOutlet weak var myImageView: UIImageView? 
    @IBOutlet weak var myTextLabel: UILabel? 
} 
+0

erstellen, das ist, was ich eigentlich tue, aber es gibt viel mehr gleichen Code, wie Animation oder ui Statusänderungen. – dkoch

+0

Ich habe meine Antwort aktualisiert, um zu zeigen, wie Sie Code zwischen einem UIView und einem UITableViewCell freigeben können. Ich hoffe, das macht in Ihrem Fall Sinn. –

+0

sieht aus wie die Ansichten als Controller fungieren. Das möchte ich vermeiden ... – dkoch

0

Erstellen Sie eine separate Taste Leiste Komponenten, in dem Sie die Datenquelle festgelegt, wenn Sie sicher sind, dass bei bestimmten Index Sie bestimmte Anzahl von Tasten zeigen wollen, dann ein Wörterbuch als Datenquelle machen, Schlüssel Willen be indice und value wird ein anderes Wörterbuch sein, das den Titel für die Schaltfläche speichert. Und Sie können die Datenquelle lesen und können programmatisch Schaltflächen in separaten Buttonbar-Komponenten

Verwandte Themen