[英]Swift: Tableview and Search Bar send null object on first time with segue
我有一個帶有搜索欄的tableview。 搜索方法還可以,效果很好。 我對didSelectRowAtIndexPath部分有問題。
當我選擇一個列表項(單元格)時,需要將其通過segue傳遞到下一場景。
但是當我選擇一個單元格以顯示項目詳細信息時;
第一選擇:空對象, 第二選擇:第一對象, 第三選擇:第二對象傳遞到下一場景。
我的車輛類別:
class Vehicle {
var owner : String
var plate : String
var location : String
var isOnline : String
var state : String
var speed : String
var driver : String
var maxSpeed : String
var dailyOverSpeed : String
var energy : String
var firstEngineDate : String
var messageDate : String
var dailyKm : String
var totalMoving : String
var totalWaiting : String
var totalParking : String
var totalKm : String
init() {
self.owner = ""
self.plate = ""
self.location = ""
self.isOnline = ""
self.state = ""
self.speed = ""
self.driver = ""
self.maxSpeed = ""
self.dailyOverSpeed = ""
self.energy = ""
self.firstEngineDate = ""
self.messageDate = ""
self.dailyKm = ""
self.totalMoving = ""
self.totalWaiting = ""
self.totalParking = ""
self.totalKm = ""
}
init(owner: String, plate: String, location: String, isOnline: String, state: String, speed: String, driver: String, maxSpeed: String, dailyOverSpeed: String, energy: String, firstEngineDate: String, messageDate: String, dailyKm: String, totalMoving: String, totalWaiting: String, totalParking: String, totalKm: String) {
self.owner = owner
self.plate = plate
self.location = location
self.isOnline = isOnline
self.state = state
self.speed = speed
self.driver = driver
self.maxSpeed = maxSpeed
self.dailyOverSpeed = dailyOverSpeed
self.energy = energy
self.firstEngineDate = firstEngineDate
self.messageDate = messageDate
self.dailyKm = dailyKm
self.totalMoving = totalMoving
self.totalWaiting = totalWaiting
self.totalParking = totalParking
self.totalKm = totalKm
}
}
我的tableview控制器:
class VehiclesTableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate{
...
var vehicles = [Vehicle]()
var filteredVehicles = [Vehicle]()
var selectedVehicle = Vehicle()
.....
}
didSelectRowAtIndexPath :
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (tableView == self.tableView) {
self.selectedVehicle = vehicles[indexPath.row]
} else {
self.selectedVehicle = filteredVehicles[indexPath.row]
}
println(self.selectedVehicle.plate)
}
prepareForSegue :
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "DisplayViewSegue" {
var nextScene = segue.destinationViewController as! DisplayViewController
nextScene.currentVehicle = self.selectedVehicle
}
}
當我選擇任何單元格(帶有搜索或不帶有搜索)時,我的println()會在didSelectRowAtIndexPath中起作用。 困惑?
聽起來您可能將搜索欄作為表格視圖的頂部元素,所以當您從車輛數組訪問元素時,它必須為indexPath.row-1。 另外,如果僅在選擇行時進行查找,則可以使用self.tableview.indexPathForSelectedRow()直接訪問索引,並使用它來獲取適當的工具,希望這可以解決您的問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.