我有一个列表,其中包含从 Realm 数据库中查询的 places 的4个对象。
theme.js
我要隐藏所选的内容。
例如当我单击Optional(Results<Place> <0x7feaaea447c0> (
[0] Place {
name = Daniel Webster Highway;
country = United States;
lat = 42.72073329999999;
lon = -71.44301460000001;
},
[1] Place {
name = District Avenue;
country = United States;
lat = 42.48354969999999;
lon = -71.2102486;
},
[2] Place {
name = Gorham Street;
country = United States;
lat = 42.62137479999999;
lon = -71.30538779999999;
},
[3] Place {
name = Route de HHF;
country = Haiti;
lat = 18.6401311;
lon = -74.1203939;
}
))
时,我不希望它显示在列表中。
在Swift 4中如何做到这一点?
Daniel Webster Highway
答案 0 :(得分:1)
您可以将所选行的索引从placeVC传递到PlaceDetailVC以及
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == passedIndex {
return 0
}
return 70
}
将单元格高度设置为0以隐藏该单元格。
答案 1 :(得分:1)
var distances = [ String ]()
var places : Results<Place>?
然后在tableView(_:cellForRow:)
cell.address.text = (places![indexPath.row]["name"] as! String)
cell.distance.text = distances[indexPath.row]
别那样做。这些信息需要同步。
相反,请使用其他类/结构或扩展名来保存距离和位置。
var array: [PlaceModel]
struct PlaceModel {
let place: Place
let distance: Double //You can use String, but that's bad habit
//Might want to add the "image link" also?
}
在load()
中:
array.removeAll()
let tempPlaces = selectedTrip.places.sorted(byKeyPath: "name", ascending: true)
for aPlace in tempPlaces {
let distance = //Calculate distance for aPlace
array.append(PlaceModel(place: aPlace, distance: distance)
}
现在,在tableView(_:cellForRow:)
中:
let aPlaceModel = array[indexPath.row]
if activePlace == indexPath {
let cell = tableView.dequeue...
//Use cellWithImage for that place
return cell
} else {
let cell = tableView.dequeue...
cell.address.text = aPlaceModel.place.name
cell.distance.text = aPlaceModel.distance
return cell
}
如果需要,可以将逻辑保持在所需的位置(如果需要heightForRow,例如,如果您希望所有图像的高度为80pt,其余图像的高度为44pt,等等)。
在tableView(_:didSelectRowAt:)
中,添加tableView.reloadData()
或更好的tableView.reloadRows(at: [indexPath] with: .automatic)
NB:代码未经测试,可能无法编译,但是您应该明白这一点。