未调用swift uitableview didSelectRowAtIndexPath

未调用swift uitableview didSelectRowAtIndexPath,uitableview,swift,didselectrowatindexpath,Uitableview,Swift,Didselectrowatindexpath,我在做天气秀项目。我正在从数据库中列出这些城市。当我单击一个城市时,另一个viewcontroller将打开。但是当我点击一个城市时,didSelectRowAtIndexPath功能不起作用 以下是我的代码: class HavaViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var havatableView: UITableView! ove

我在做天气秀项目。我正在从数据库中列出这些城市。当我单击一个城市时,另一个viewcontroller将打开。但是当我点击一个城市时,
didSelectRowAtIndexPath
功能不起作用

以下是我的代码:

class HavaViewController: UIViewController, UITableViewDataSource, UITableViewDelegate  {
    @IBOutlet var havatableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.havatableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
        havatableView.dataSource = self

        // XMl Parse
        let url = NSURL(string: "http://haberftp.trt.net.tr/haberservis/havadurumu.aspx")
        let data = NSData(contentsOfURL: url!)
        if(data != nil){
        let dataxml = NSString(data:data!, encoding: NSUTF8StringEncoding)
        let xml = SWXMLHash.parse(dataxml!)

        for merkez in xml["HavaTahmini"]["Merkez"] {
            var cityName = merkez.element?.attributes["MerkezAdi"]
            for gun in merkez["Gun"] {
              //  println(gun.element?.attributes["Tarih"])
                var tarih = gun.element?.attributes["Tarih"]
                var endusuk = gun["EnDusuk"].element?.text
                var enyuksek = gun["EnYuksek"].element?.text
                var durum = gun["DurumuKod"].element?.text


            }
        }


        }

     self.loadData()





        println("hava")
        // Do any additional setup after loading the view.
    }
    func newCityWeather(cityName: String, tarih: String, endusuk: String, enyuksek: String, durum: String){

        var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate )
        var context: NSManagedObjectContext = appDel.managedObjectContext!
        var newCity = NSEntityDescription.insertNewObjectForEntityForName("Hava", inManagedObjectContext: context) as NSManagedObject


        newCity.setValue(cityName, forKey: "sehir")
        newCity.setValue(tarih, forKey: "tarih")
        newCity.setValue(endusuk, forKey: "endusuk")
        newCity.setValue(endusuk, forKey: "enyuksek")
        newCity.setValue(endusuk, forKey: "endusuk")
        newCity.setValue(endusuk, forKey: "durum")

        context.save(nil)

        //  println(newCity)


    }
    func newCity(cityName: String){

        var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate )
        var context: NSManagedObjectContext = appDel.managedObjectContext!
        var newCity = NSEntityDescription.insertNewObjectForEntityForName("Sehirler", inManagedObjectContext: context) as NSManagedObject


        newCity.setValue(cityName, forKey: "sehir")
        context.save(nil)



    }
    func loadData() {
        var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate )
        var context: NSManagedObjectContext = appDel.managedObjectContext!


        var request = NSFetchRequest(entityName: "Sehirler")
        request.returnsObjectsAsFaults = false
        var results: NSArray = context.executeFetchRequest(request, error: nil)!
        if results.count>0 {

            for res in results {
            //    println(res)
            }

        }else {
            println("sonuc yok")

        }


    }

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

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 81
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell : HavaTableViewCell = tableView.dequeueReusableCellWithIdentifier("mycell") as HavaTableViewCell
        var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate )
        var context: NSManagedObjectContext = appDel.managedObjectContext!


        var request = NSFetchRequest(entityName: "Sehirler")
        request.returnsObjectsAsFaults = false
        var results: NSArray = context.executeFetchRequest(request, error: nil)!
        if results.count>0 {
            var cities = [String]()

            for result in results {
                 var res = result as NSManagedObject
                let city = res.valueForKey("sehir") as String
                cities.append("\(city)")
            }

            cell.setCell(cities[indexPath.row])


        }




        return cell
    }
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
      println("click")
        println(indexPath.row)
     //   performSegueWithIdentifier("showHavaDetay", sender: self)
    }



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



}
您缺少以下内容:

havatableView.delegate = self

您必须设置
UITableView
delegate
属性,才能启动
didSelectRowAtIndexPath
函数。仅将类声明为支持
UITableViewDelegate
协议是不够的

havatableView.delegate = self
将委托设置为self会告诉
UITableView
当前类具有
UITableView委托中的函数


更多信息:

当比较两个相同的代码示例时,我遇到了相同的问题,其中一个正在工作,另一个没有调用
didSelectRowAtIndexPath

解决这个问题至少有两种方法:

1) 在代码本身中:

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {
    table.delegate = self
    table.dataSource = self 
//data source might be already set if you see contents of the cells
//the main trick is to set delegate
}
2) 使用情节提要或文档大纲(在我的案例中这是一个问题,因为情节提要更改在.swift控制器类中不可见)

打开文档大纲,然后按住Control键并按
您的
表格视图
您将看到两个插座,分别称为“
delegate
”和“
dataSource
” 将它们逐个拖动到包含的
视图控制器
(右至黄色圆圈上)

就这样