2016-04-11 11 views
0

Ich versuche, Daten von der ausgewählten Zelle einer Tabellenansicht "Events" an einen View Controller "Details" zu übergeben. Ich habe mir verschiedene Fragen angesehen, die meinen ähneln, aber ich kann es nicht korrekt auf meinen Code anwenden. Ich habe auch Etiketten anstelle eines Untertitel-Stils verwendet. Es gibt auch ein Bild, das übergeben werden muss.Probleme bei der Übergabe von Daten aus TableViewCell-Labels an einen ViewController

meiner Ansicht-Controller sieht wie folgt aus:

import UIKit 

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet var tableView: UITableView! 

    var names = ["BTown Diner", "Dunnkirk", "Chocolate Mousse", "Lil Wayne", "Annie", "Campus Squad Social"] 
    var details = ["Free drink with meal after 12 AM", "LADIES drink free", "10% off all ice cream!", "Lil 500 concert", "an IU Theater Production", "Bring your Squad to the Campus Squad Social"] 
    var images = [UIImage(named: "btown"), UIImage(named: "dunn"), UIImage(named: "choco"), UIImage(named: "lilwayne"), UIImage(named: "default"), UIImage(named: "default")] 




    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return names.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell 

     cell.name.text = names[indexPath.row] 
     cell.detail.text = details[indexPath.row] 
     cell.photo.image = images[indexPath.row] 

     return cell 
    } 

    var valueToPass:String! 

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
     println("You selected cell #\(indexPath.row)!") 

     // Get Cell Label 
     let indexPath = tableView.indexPathForSelectedRow(); 
     let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!; 

     valueToPass = currentCell.textLabel.text 
     performSegueWithIdentifier("detailsSegue", sender: self) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if (segue.identifier == "detailsSegue") { 

      // initialize new view controller and cast it as your view controller 
      var viewController = segue.destinationViewController as detailsViewController 
      // your new view controller should have property that will store passed value 
      viewController.passedValue = valueToPass 
     } 

    } 

} 

und hier ist meine customCell.swift Datei:

import UIKit 

class CustomCell: UITableViewCell { 

    @IBOutlet var photo: UIImageView! 
    @IBOutlet var name: UILabel! 
    @IBOutlet var detail: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

} 

Ich bin sehr neu zu Swift, und es hat sich als sehr anspruchsvoll sein, mich. Ich bin wirklich kein Programmierer, aber ein Projekt verlangt, dass ich etwas von der Programmierung für eine Anwendung abschließe, für die ich der UI/UIX-Designer bin. Danke im Voraus für Ihre Hilfe!

Antwort

0

Versuchen Sie, Ihr „CustomCell“ mit dem Namen „Zelle“

override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellReuseIdentifier: "cell") 
    } 
+0

Hmm, das schien wie es für eine Sekunde funktioniert, dann wurde ich mit meinem Lieblingssignal SIGABRT Fehler zurückgegeben. Würdest du das tun? Ich weiß in der Vergangenheit, wenn dies passiert ist, ist es normalerweise ein Problem mit der Namensgebung? Das ist schwer, ha. –

+0

Verfolgen Sie das Fehlerprotokoll in Ihrer Konsole, um zu sehen, wo das SIGABRT passiert ist. –

0

Hier ist eine leichte Abwandlung des Code beginnend mit den Hauptansicht-Controller registrieren ...

import UIKit 

class EventTableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate { 

    var names = ["BTown Diner", "Dunnkirk", "Chocolate Mousse", "Lil Wayne", "Annie", "Campus Squad Social"] 
    var details = ["Free drink with meal after 12 AM", "LADIES drink free", "10% off all ice cream!", "Lil 500 concert", "an IU Theater Production", "Bring your Squad to the Campus Squad Social"] 
    var images = [UIImage(named: "btown"), UIImage(named: "dunn"), UIImage(named: "choco"), UIImage(named: "lilwayne"), UIImage(named: "default"), UIImage(named: "default")] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return names.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell 
     cell.name.text = names[indexPath.row] 
     cell.detail.text = details[indexPath.row] 
     cell.photo.image = images[indexPath.row] 
     return cell 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "detailsSegue" { 
      guard let eventVC = segue.destinationViewController as? DetailsViewController, 
        let eventIndex = tableView.indexPathForSelectedRow?.row else { 
         return 
        } 
      eventVC.eventName = names[eventIndex] 
      eventVC.eventDetail = details[eventIndex] 
      eventVC.eventPhoto = images[eventIndex] 
     } 
    } 
} 

und dann ein BeispieldetailsViewController ...

import UIKit 

class DetailsViewController: UIViewController { 

    var eventName: String = "" 
    var eventDetail: String = "" 
    var eventPhoto: UIImage! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print(eventName) 
     print(eventDetail) 
    } 
} 

Sie hatten einen guten Start. Hoffe, das hilft dir den Rest des Weges zu bekommen.

+0

Zunächst einmal, vielen Dank. Ihre Antwort in meinem Posteingang zu sehen, war wie ein Geschenk des Himmels. Ich übertreibe nicht, das verfolgt meine Träume. Ich habe den Code ausgeführt, den Sie angegeben haben, jedoch gebe ich Fehler in ein paar Zeilen zurück. –

+0

Klasse 'EventTableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {' "redundante Konformität von 'EventTableViewController' zum Protokoll 'UITableViewDataSource'", zwei mal, auch 'let cell = self.tableView.dequeueReusableCellWithIdentifier ("Zelle", forIndexPath: indexPath) as! CustomCell' "Verwendung des nicht deklarierten Typs 'CustomCell' –

+0

Löschen Sie zuerst UITableViewDataSource und UITableViewDelegate aus der ersten Zeile. Sie müssen bereits im Storyboard festgelegt sein. Um das zweite Problem zu beheben, gehen Sie zu Storyboard und wählen Sie Ihre Tabellenzelle. Suchen Sie den Identity Inspector und stellen Sie sicher, dass Custom Class> Class auf CustomCell eingestellt ist. Um sicherzugehen, finden Sie als Nächstes den Attribute Inspector und setzen Sie den Identifier auf "cell" (ohne die Klammern.) – squarehippo10

Verwandte Themen