未调用swift uitableview didSelectRowAtIndexPath
我在做天气秀项目。我正在从数据库中列出这些城市。当我单击一个城市时,另一个viewcontroller将打开。但是当我点击一个城市时,未调用swift uitableview didSelectRowAtIndexPath,uitableview,swift,didselectrowatindexpath,Uitableview,Swift,Didselectrowatindexpath,我在做天气秀项目。我正在从数据库中列出这些城市。当我单击一个城市时,另一个viewcontroller将打开。但是当我点击一个城市时,didSelectRowAtIndexPath功能不起作用 以下是我的代码: class HavaViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var havatableView: UITableView! ove
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
”
将它们逐个拖动到包含的视图控制器
(右至黄色圆圈上)
就这样