【问题标题】:prepare segue function in table view to different view controller将表格视图中的 segue 函数准备到不同的视图控制器
【发布时间】:2015-07-21 09:18:12
【问题描述】:

当我点击表格视图的行时,应该在不同的视图控制器中编辑详细信息。我的准备 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()
        }
    }
}

【问题讨论】:

    标签: swift tableview segue navigationcontroller


    【解决方案1】:

    您没有 performSegueWithIdentifier。 试试这个:

    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 中打印时显示为零。我可以在 selectedVehicle 中接收我的 json 对象。但我无法将 JSON 对象转换为我可以在第二个控制器中使用的任何变量
    【解决方案2】:

    但是当我在控制台中打印时 secondScene.detailedDescriptionLabel 显示为零。我可以在 selectedVehicle 中接收我的 json 对象。但我无法将 JSON 对象转换为可以在第二个控制器中使用的任何变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多