请耐心等待我,因为我是新手。 我正在努力创建纽约市10家餐厅的Collection视图。当用户点击餐馆(包含餐馆图像的单元格)时,我希望弹出一个新的集合视图控制器,其中包含餐馆菜单的集合视图。
我希望能够使用一个集合视图控制器来显示每个餐厅在用户点击餐厅(单元格)时所具有的不同菜单。
我正在使用一个原型单元来填充所有10家餐厅。我现在的困难是如何让每个单元格弹出菜单集合视图控制器,并选择特定餐厅的菜单集。菜单集合视图控制器将显示食物的图像,名称和价格(几乎就像Instacart在您选择商店时显示杂货的方式。现在,我只能点击任何单元格并显示相同的菜单。< / p>
这是我的餐厅列表集合视图控制器。已被评论的DidSelect是我试图根据其索引路径选择单元格。
import UIKit
private let reuseIdentifier = "ManhattanCell"
class ManhattanCollectionViewController: UICollectionViewController {
var yourRest = [String]()
override func viewDidLoad() {
super.viewDidLoad()
yourRest = ["RestAwash",
"RestZoma",
"RestLeBaobab",
"RestSokhna",
"RestCoumba",
"RestMassawa",
"RestLesAmbassades",
"RestPonti",
"RestBraai",
"RestNewIvoire"]
}
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return yourRest.count
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! RestaurantCollectionViewCell
// Configure the cell
let image = UIImage(named: yourRest[indexPath.row])
cell.manhattanImageView.image = image
return cell
}
/* override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == 0 {
// call your alert here
self.performSegueWithIdentifier("awashShowDetail", sender: self)
} else if indexPath.row == 1 {
self.performSegueWithIdentifier("testView", sender: self)
}
}
*/
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let sideSize = collectionView.frame.size.width / 2.51;
return CGSize(width: sideSize, height: sideSize);
}
}
以下是我的RestaurantCollectionViewCell
import UIKit
class RestaurantCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var manhattanImageView: UIImageView!
}
我的问题似乎与此问题有点类似。我按照答案回答,我仍然无法让它发挥作用。
Swift: UICollectionView selecting cell indexPath issues
感谢。
答案 0 :(得分:0)
我将继续假设您将拥有10个菜单集合视图控制器。这个建议适用于只有一个视图控制器,除了segueIdentifier
之外,还有一个菜单控制器数据属性。
我建议创建一个数据模型来保存Rest信息。
struct MyRest {
let imageName: String
let segueIdentifier: String
}
将yourRest
属性转换为MyRest
个对象数组。
var yourRestX = [MyRest]()
然后在viewDidLoad()
yourRest = [
MyRest(imageName: "RestAwash", segueIdentifier: "awashShowDetail"),
MyRest(imageName: "RestZoma", segueIdentifier: "zomaShowDetail"),
MyRest(imageName: "RestLeBaobab", segueIdentifier: "leBaobabShowDetail"),
MyRest(imageName: "RestSokhna", segueIdentifier: "sokhnaShowDetail"),
MyRest(imageName: "RestCoumba", segueIdentifier: "coumbaShowDetail"),
MyRest(imageName: "RestMassawa", segueIdentifier: "massawaShowDetail"),
MyRest(imageName: "RestLesAmbassades", segueIdentifier: "lesAmbassadesShowDetail"),
MyRest(imageName: "RestPonti", segueIdentifier: "rontiShowDetail"),
MyRest(imageName: "RestBraai", segueIdentifier: "braaiShowDetail"),
MyRest(imageName: "RestNewIvoire", segueIdentifier: "newIvoireShowDetail"),
]
当然,这意味着您将需要10个菜单集合视图控制器,每个控制器都按列出的名称命名。 (这不是一个很好的解决方案,但这一切都取决于您的需求)。
在collectionView(,cellForItemAtIndexPath)
// Configure the cell
let image = UIImage(named: yourRest[indexPath.row].imageName)
cell.manhattanImageView.image = image
然后在collectionView(,didSelectItemAtIndexPath)
let identifier = yourRest[indexPath.row].segueIdentifier
self.performSegueWithIdentifier(identifier, sender: self)