2016-06-04 3 views
0

Я строю табличный вид для магазинов в нашем городе, и я хотел бы иметь возможность щелкнуть название магазина, чтобы увидеть некоторые подробности. Вы можете найти некоторые фотографии main.storyboard и файлов here. Я также добавил видео с проблемой при нажатии.Segue from tableview to detail не работает

Код в masterViewController упоминается ниже.

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. 
} 

} 

Я не уверен, что я делаю неправильно, так что нажатие не будет работать .. спасибо заранее за преподавательские м e как исправить это!

ответ

1

Вам необходимо реализовать метод didSelectRowAtIndexPath для представления таблицы в первом классе. В этом случае вы выполните последовательность, которая фактически переместится с одного ViewController на другой.

+0

Спасибо! Работает как шарм –

Смежные вопросы