在选定的行swift 3推一个segue

时间:2017-04-28 02:09:28

标签: ios iphone swift swift3 segue

我在选择一行后尝试推送一个segue。我已经通过各种方式尝试了其他人的问题,但我没有在哪里。 这是我的代码:

import UIKit
import CoreData

class RoutineViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableview: UITableView! {
    didSet {
        tableview.dataSource = self
    }
}

var routines: [NSManagedObject] = []

var stringToPass:String!

override func viewDidLoad() {

    super.viewDidLoad()

    tableview.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return
    }

    let managedContext = appDelegate.persistentContainer.viewContext

    let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Routine")

    do {
        routines = try managedContext.fetch(fetchRequest)
    } catch let error as NSError {
        print("Could not fetch. \(error), \(error.userInfo)")
    }
}

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

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return routines.count


}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableview.cellForRow(at: indexPath)
    tableview.deselectRow(at: indexPath, animated: true)

    performSegue(withIdentifier: "R2", sender: cell)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "R2" {

            self.performSegue(withIdentifier: "R2", sender: self)
        }

    }

我确实有表工作和一切,有一个保存功能,删除功能,它取出和更新我只是无法让它转到另一个视图控制器。 segue标识符称为“R2”。

3 个答案:

答案 0 :(得分:1)

您尚未将tableview.delegate设置为self

tableView(_:didSelectRowAt)Table View Delegate方法。在某个地方设置了viewDidLoad

override func viewDidLoad() {
    ...
    tableview.delegate = self
    ...
}

答案 1 :(得分:0)

尝试更改为:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

let cell = tableview.cellForRow(at: indexPath)
tableview.deselectRow(at: indexPath, animated: true)

performSegue(withIdentifier: "R2", sender: self)

}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "R2" {


    }

}

答案 2 :(得分:0)

监控 UITableView 中的任何活动,将委托作为自己

@IBOutlet weak var tableview: UITableView! {
       didSet { 
            tableview.dataSource = self
            tableview.delegate = self
            }
 }