从表视图到详细信息的 Segue 不起作用



我正在为我们镇上的商店构建一个表格视图,我希望能够单击商店的名称以查看更多详细信息。你可以在这里找到主故事板和文件的一些图片。我还添加了点击问题的视频。

主视图控制器的代码如下所述:

import UIKit
class MasterTableViewController: UITableViewController {
// MARK: - Properties
var detailViewController: DetailViewController? = nil
var winkels = [Winkel]()
// MARK: - View Setup
override func viewDidLoad() {
    super.viewDidLoad()
    winkels = [
        Winkel(category:"Literature", name:"Standaard"),
        Winkel(category:"Literature", name:"Acco"),
        Winkel(category:"Clothing", name:"H&M"),
        Winkel(category:"Clothing", name:"C&A"),
        Winkel(category:"Clothing", name:"Patio"),
        Winkel(category:"Restaurants", name:"De 46"),
        Winkel(category:"Restaurants", name:"Het hoekske"),
        Winkel(category:"Supermarkets", name:"Carrefour"),
        Winkel(category:"Supermarkets", name:"Colruyt")
    ]
    winkels.sortInPlace({ $0.name < $1.name })
    if let splitViewController = splitViewController {
        let controllers = splitViewController.viewControllers
        detailViewController = (controllers[controllers.count - 1] as! UINavigationController).topViewController as? DetailViewController
    }
    self.tableView.reloadData()
}
override func viewWillAppear(animated: Bool) {
    clearsSelectionOnViewWillAppear = splitViewController!.collapsed
    super.viewWillAppear(animated)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
// MARK: - Table View
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return winkels.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
    let winkel = winkels[indexPath.row]
    cell.textLabel!.text = winkel.name
    cell.detailTextLabel?.text = winkel.category
    return cell
}
// MARK: - Segues
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "showDetail" {
        if let indexPath = tableView.indexPathForSelectedRow {
            let winkel = winkels[indexPath.row]
            let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController
            controller.detailWinkel = winkel
            controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
            controller.navigationItem.leftItemsSupplementBackButton = true
        }
    }
 }
}

最后一部分显示下一个导航控制器(名为showDetail,并且是"显示细节(例如替换)"的续集。

下面是 detailViewController 的代码:

import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var detailDescriptionLabel: UILabel!
@IBOutlet weak var WinkelImageView: UIImageView!
var detailWinkel: Winkel? {
    didSet {
        configureView()
    }
}
func configureView() {
    if let detailWinkel = detailWinkel {
        if let detailDescriptionLabel = detailDescriptionLabel, WinkelImageView = WinkelImageView {
            detailDescriptionLabel.text = detailWinkel.name
            WinkelImageView.image = UIImage(named: detailWinkel.name)
            title = detailWinkel.category
        }
    }
}
override func viewDidLoad() {
    super.viewDidLoad()
    configureView()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

不确定我做错了什么,所以点击不起作用..提前感谢您教我如何解决此问题!

您需要在

第一个类中为表视图实现方法didSelectRowAtIndexPath。 在此,您将执行实际上从一个视图控制器移动到另一个视图控制器的 segue。

最新更新