Подготовить функцию segue в табличном представлении к другому контроллеру представления

Когда я нажимаю на строку в табличном представлении, нужно редактировать с подробностями в другом контроллере представления. Что-то не так с моей функцией подготовки. А также, где написать код в новом контроллере для просмотра на этой странице.

import UIKit

class VehiclesViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{


    var tableView:UITableView?
    var items = NSMutableArray()

    override func viewWillAppear(animated: Bool) {
        let frame:CGRect = CGRect(x: 0, y: 100, width: self.view.frame.width, height: self.view.frame.height)
        self.tableView = UITableView(frame: frame)
        self.tableView?.dataSource = self
        self.tableView?.delegate = self
        self.view.addSubview(self.tableView!)
        addDummyData()
    }

    func addDummyData() {
        self.items.removeAllObjects()
        RestApiManager.sharedInstance.getVehicleList { json in
            let results = json
            println(results.description)
            for (index: String, subJson: JSON) in results {
                let vehicle: AnyObject = subJson.object;
                self.items.addObject(vehicle);
                dispatch_async(dispatch_get_main_queue(), {
                    tableView?.reloadData()
                });
            }
        }
    }

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

        var secondScene = segue.destinationViewController as! VehicleEditViewController

        if let indexPath = self.tableView?.indexPathsForSelectedRows(){
            let selectedVehicle: AnyObject = self.items[indexPath.row]
            secondScene.detailedDescriptionLabel = selectedVehicle as! UILabel
        }

    }



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


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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell

        if cell == nil {
            cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL")
        }

        println("something about the table");

        let vehicle:JSON = JSON(self.items[indexPath.row])
        cell!.textLabel?.text = vehicle["vrn"].string


        let status = vehicle["liveView"]["currentStatus"].string
        cell!.backgroundColor = getColorForStatus(status!)

        var stateString = ""
        var speedIn = " mph"
        switch(status!) {
            case "moving":
                stateString =  vehicle["liveView"]["gpsPosition"]["speed"].stringValue + speedIn
                break;
            case "idle":
                stateString = vehicle["liveView"]["lastState"].string!
                break;
            case "stop":
                 stateString = "Stationary"
                break;
            default:
                stateString = "State Unknown"
        }
        cell?.detailTextLabel?.text = stateString


        return cell!
    }



    func getColorForStatus(status : String) -> UIColor {
        switch(status) {
            case "moving":
                return UIColor.greenColor();
            case "idle":
                return UIColor.yellowColor();
            case "stop":
                return UIColor.redColor();
            default:
                return UIColor.whiteColor()
        }
    }
}

2 ответа

У вас нет executeSegueWithIdentifier. Попробуй это:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
        performSegueWithIdentifier("yourSegueNameToEditVehicles", sender : indexPath) }

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

    var secondScene = segue.destinationViewController as! VehicleEditViewController

    if let indexPath = sender as! NSIndexPath{
        let selectedVehicle: AnyObject = self.items[indexPath.row]
        secondScene.detailedDescriptionLabel = selectedVehicle as! UILabel
    }

}

Убедитесь, что у вас есть переход с хорошим именем между двумя вашими представлениями в вашей раскадровке.

Но когда я печатаю в консоли secondScene.detailedDescriptionLabel, который показывает ноль. я могу получить свой объект JSON в выбранном автомобиле. но я не могу преобразовать объект JSON в любую переменную, где я могу использовать во втором контроллере

Другие вопросы по тегам