我正在cellImageName
CitySelectViewController
中尝试保存图片名称(显示为错误行上方的评论)。
ViewController.swift
var selectedImages = [String : UIImage ]()
let cityImages: [String : UIImage] = [ "City00" : UIImage(named: "city_00")! , "City01" :UIImage(named: "city_01")!, "City02" : UIImage(named: "city_02")!]
let townImages: [String : UIImage] = [ "Town00" : UIImage(named: "town_00")! , "Town01" :UIImage(named: "town_01")!, "Town02" : UIImage(named: "town_02")!]
let cityBImages: [String : UIImage] = [ "CityB00" : UIImage(named: "city_B00")! , "CityB01" :UIImage(named: "city_B01")!, "CityB02" : UIImage(named: "city_B02")!]
let townBImages: [String : UIImage] = [ "TownB00" : UIImage(named: "town_B00")! , "TownB01" :UIImage(named: "town_B01")!, "TownB02" : UIImage(named: "town_B02")!]
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
as! CollectionViewCell
// Ambiguous reference to member 'subscript'
cell.imageView?.image = self.selectedImages[(indexPath as NSIndexPath).item]
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showOptions"
{
let indexPaths = self.collectionView!.indexPathsForSelectedItems!
var indexPath = indexPaths[0] as IndexPath
let CityVC = segue.destination as! CitySelectViewController
if (indexPath.row == 2)
{
if self.areas == city
{
CityVC.imageSelected = cityBImages
}
else
if self.areas == town
{
CityVC.imageSelected = townBImages
}
else
// Ambiguous reference to member 'subscript'
CityVC.imageSelected = self.selectedImages[(indexPath as NSIndexPath).item]
}
如何摆脱这些错误?
This is `CitySelectViewController.swift`
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.imageSelected.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
as! CityCollectionViewCell
cell.imageView?.image = imageSelected[(indexPath as NSIndexPath).row]
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cellImage = imageSelected[(indexPath as NSIndexPath).row]
cellImageName = imageSelected[(indexPath as NSIndexPath).row]
}
答案 0 :(得分:1)
您可以简单地创建一个数组数组,并将每个数组放入集合视图中自己的部分:
struct City { var name:String var imageName:String }
class firstViewController: UIViewController // Or UICollectionViewController
let cities = [City(name:"City00", imageName:"city_00"),
City(name:"City01", imageName:"city_01"),
City(name:"City02", imageName:"city_02")]
let towns = [City(name:"Town00", imageName:"town_00"),
City(name:"Town01", imageName:"town_01"),
City(name:"Town02", imageName:"town_02")]
let villages = [City(name:"Village00", imageName:"village_00"),
City(name:"Village01", imageName:"village_01"),
City(name:"Village02", imageName:"village_02")]
let allPlaces = [cities, towns, villages]
func numberOfSections(in collectionView: UICollectionView) -> Int {
return self.allPlaces.count
}
func collectionView(_ collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
let places = self.allPlaces[section]
return places.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
as! CollectionViewCell
let places = self.allCities[indexPath.section]
let city = places[indexPath.item]
cell.imageView?.image = UIImage(named:city.imageName)
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showOptions" {
if let indexPaths = self.collectionView!.indexPathsForSelectedItems {
if let cityVC = segue.destination as? CitySelectViewController {
var selectedCities = [City]()
for indexPath in indexPaths {
let places = self.allPlaces[indexPath.section]
selectedCities.append(places[indexPath.item])
}
cityVC.selectedCities = selectedCities
}
}
}
}
答案 1 :(得分:0)
首先,你的selectedImage永远不会被填充(或者至少在你提供的代码中),所以它总是一个空字典。其次,为什么你将indexPath转发到cellForItemAt中的NSIndexpath?
cell.imageView?.image = imageSelected[(indexPath as NSIndexPath).row]
你的字典也是[String:UIImage]的类型,你将其视为[Int:UIImage]。
当你打算使用indexpath时,可以使用数组而不是[Int,UIImage]。