2016-11-08 4 views
10

Kann jemand sehen, warum in der Welt didSelectRowAtIndexPath nicht aufgerufen würde? Ich habe dreifache Überprüfung durch delegate sowohl im Code als auch im Storyboard.didSelectRowAtIndexPath funktioniert nicht, Swift 3

class AddCard: UIViewController,UIPopoverPresentationControllerDelegate, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet weak var cardView: UIView! 
@IBOutlet weak var tableView: UITableView! 

let tableItems = ["Background Color","Background Image","Font Style","Font Color"] 
let cellID = "cell" 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 
} 

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

func setBackgroundColor (_ color: UIColor) { 
    cardView.backgroundColor = color 
} 

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

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath as IndexPath) 

    let row = indexPath.row 
    cell.textLabel?.text = tableItems[row] 

    return cell 
} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) { 
    tableView.deselectRow(at: indexPath as IndexPath, animated: true) 
    print(indexPath.row) 
    let row = indexPath.row 
    switch(row){ 
    case 0: 
     let popoverVC = storyboard?.instantiateViewController(withIdentifier: "colorPickerVC") as! ColorPickerViewController 
     popoverVC.modalPresentationStyle = .popover 
     popoverVC.preferredContentSize = CGSize(width: 284, height: 446) 
     if let popoverController = popoverVC.popoverPresentationController { 
      popoverController.sourceView = self.view 
      popoverController.sourceRect = CGRect(x: 0, y: 0, width: 85, height: 30) 
      popoverController.permittedArrowDirections = .any 
      popoverController.delegate = self 
      popoverVC.delegate = self 
     } 
     present(popoverVC, animated: true, completion: nil) 
     break 
    default: break 

    } 
} 

} 
+3

Sie haben die Signatur von 'didSelectRowAtIndexPath:' nicht auf die Swift 3-Version aktualisiert. Aus dem doc: 'Optional func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)', beachten Sie '_' das 'didSelectRowAt' gegenüber' didSelectRowAtIndexPath', wie das andere, das Sie aktualisiert haben, aber nicht dieses. Entfernen Sie die Zeile, und lassen Sie XCode die Autovervollständigung durchführen. Andernfalls können Sie es einfach durch das Dokument ersetzen. – Larme

+0

Getötet! Danke, Mann. – TheValyreanGroup

Antwort

15

Swift 3 die Unterschrift des Verfahrens geändert (eine Menge von Methoden auch neue "Regeln"/style)

ersetzen:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) mit
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

Beachten Sie die _, Die didSelectRowAt vs didSelectRowAtIndexPath, wie die anderen, die Sie aktualisiert (die auch die gleichen "Stil" angepasst), aber nicht diese.

Entfernen Sie die Zeile und lassen Sie XCode die Autovervollständigung durchführen. Andernfalls können Sie es einfach durch das Dokument ersetzen.

Verwandte Themen