2016-11-17 3 views
0

Ich versuche, ein Master-Detail zu erstellen Anwendung anzeigen & Ich bin irgendwie fest.Detailansicht mit statischen Zellen

Ich habe eine Tabelle mit 100 DynamicPrototypeCells Bars angezeigt und wenn ich auf eine cell tippen, möchte ich mehr Informationen über diese Bar zu präsentieren.

Meine Frage ist, wie verschiedene data wie labels und images in die DetailView zu füllen und sie für jeden cell ändern i tippen Sie auf die korrekte data

Mein Detailview ist ein TableViewController mit StaticCells darzustellen, wie hier gezeigt:

Bars My Friends

Ich verwende Swift 2.3 und Xcode 8.1

habe ich eine Klasse meiner Detailview Daten stellen:

BarProfile.Swift:

import Foundation 

class BarProfile { 
    var HeaderImage = "" 
    var HeaderTitle = "" 
    var Age = "" 
    var Adress = "" 
    var Number = "" 
    var Time = "" 
    var Music = "" 
    var Info = "" 
    var Menu = "" 
    var More = "" 

    init(HeaderImage: String, HeaderTitle: String, Age: String, Adress: String, Number: String, Time: String, Music: String, Info: String, Menu: String, More: String) { 


     self.HeaderImage = HeaderImage 
     self.HeaderTitle = HeaderTitle 
     self.Age = Age 
     self.Adress = Adress 
     self.Number = Number 
     self.Time = Time 
     self.Music = Music 
     self.Info = Info 
     self.Menu = Menu 
     self.More = More 

    } 
} 

Vielen Dank für :)

+0

, wo die Antwort auf Ihre Frage ist @NewBie Fragen – Vinodh

Antwort

0

Shalom zu helfen, ist es eigentlich ganz einfach:

Es scheint, dass Ihre Detailansicht auch eine Tabellenansicht ist. Implementiere das genauso wie die andere Tabellenansicht.

Geben Sie Ihre 8 Zellen zurück und erstellen Sie verschiedene Zellprototypen (aus dem obigen Screenshot scheint es, Sie brauchen drei oder so). In cellForRowAtIndexPath überprüfen Sie, in welcher Zeile Sie sich befinden, und füllen Sie die Zelle mit dem richtigen Bild und dem richtigen Datenfeld von Ihrem BarProfile Objekt (das ein ivar des View-Controllers sein sollte). Das Bild und der Titel können als tableHeaderView implementiert werden.

+0

Cant i Mach es mit StaticCells? Jemand hat sogar gesagt, es ist sogar besser als Prototyp Zellen –

+0

Scheint weniger Code für mich obwohl. Sie müssten Steckdosen und Variablen für alle Symbolfelder, alle Textfelder in den Zellen usw. definieren. – Mundi

1

Es ist sehr einfach Sie müssen nur bedenken Sie headerTitle in viewController1 und wenn Ihr wählen Sie eine Zeile in detailTableViewController zeigen Sie sind gonna age zu zeigen, address und number (Sie zeigen sich nur wünschen wollen Sie durch zusätzliche statische Zellen Erstellung und Platzierung das Etikett in it)

Ihre Modified Klasse.

Zuerst erklärt alle Eigenschaften als optional und optional in init() Methode auch

import Foundation 

class BarProfile { 
var HeaderImage: String? 
var HeaderTitle: String? 
var Age: String? 
var Adress: String? 
var Number: String? 
var Time: String? 
var Music: String? 
var Info: String? 
var Menu: String? 
var More: String? 

init(HeaderImage: String?, HeaderTitle: String?, Age: String?, Adress: String?, Number: String?, Time: String?, Music: String?, Info: String?, Menu: String?, More: String?) { 


    self.HeaderImage = HeaderImage 
    self.HeaderTitle = HeaderTitle 
    self.Age = Age 
    self.Adress = Adress 
    self.Number = Number 
    self.Time = Time 
    self.Music = Music 
    self.Info = Info 
    self.Menu = Menu 
    self.More = More 

} 
} 

Bestücken der ViewController1 Tabellenansicht wie üblich und wenn der Benutzer eine beliebige Zelle tippt passieren, dass zu detailTableViewController Objekt ausgewählt. Erstellen Sie den Übergang von Ihrer Tabellenansichtszelle in ViewController1 zu detailTableViewController.

-Code in ViewController1:

class viewController1: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var barArray:[BarProfile] = [] 
var selctedIndexPath: NSIndexPath? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    for _ in 0...5 { // Creating dummy object for clear understanding. 
     let barObject = BarProfile(HeaderImage: "werw", HeaderTitle: "erqwrw", Age: "34", Adress: "qwerwer", Number: "32", Time: "time", Music: "qerqw", Info: nil, Menu: nil, More: nil) 
     barArray.append(barObject) 
    } 
} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return barArray.count 
} 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell Identifier")! as UITableViewCell 
    cell.textLabel?.text = barArray[indexPath.row].HeaderTitle 
    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selctedIndexPath = indexPath 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
} 
// MARK: Navigation Methods 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SegueIdentifier" { 
     let detailViewController = segue.destinationViewController as? detailTableViewController 
     detailViewController?.selectedBarObject = barArray[(selctedIndexPath?.row)!] 
    } 
} 

} 

Code in Ihrem detailTableViewController:

class detailTableViewController: UITableViewController { 

var selectedBarObject: BarProfile? 

@IBOutlet var ageLabel: UILabel! // connect these outlets to your label in static cells. 
@IBOutlet var addressLabel: UILabel! 
@IBOutlet var numberLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    if selectedBarObject != nil { 
     showBarDetails() 
    } else { 
     // Do nothing 
    } 
} 

// You are going to use static cells so no need to implement table view data source methods 

func showBarDetails() { 
    ageLabel.text = selectedBarObject?.Age 
    addressLabel.text = selectedBarObject?.Adress 
    numberLabel.text = selectedBarObject?.Number 
} 

} 

Thanks :)

+0

Hey, Danke für deine wirklich beeindruckende Antwort :) Im Moment ist es 6 Uhr und ich werde versuchen, dies in der nächster Tag . Sprechen Sie bald, und ich danke Ihnen noch einmal. –

+0

Keine Erwähnung, wenn es funktioniert, akzeptiere und stimme meine Antwort ab, wenn du kannst. –

+0

Absolut. Na sicher . –

Verwandte Themen