2016-01-25 3 views
2

Пожалуйста, несите меня, поскольку я новичок в быстром. Я пытаюсь создать коллекцию из 10 ресторанов в городе Нью-Йорк. Когда пользователь нажимает на ресторан (ячейка, содержащая изображение ресторана), я хочу, чтобы новый диспетчер представлений коллекции появился с коллекционным представлением меню ресторанов.Collection View Выбор ячейки с помощью swift

Я хочу, чтобы иметь возможность использовать один контроллер просмотра коллекции, чтобы показать меню, в котором каждый ресторан имеет, когда пользователь нажимает на ресторан (ячейка).

Я использую одну прототипную ячейку для заполнения всех 10 ресторанов. Моя трудность заключается в том, как заставить каждую ячейку отобразить этот контроллер представления коллекции меню с набором меню для выбранного ресторана. Контроллер представления коллекции меню отобразит изображение пищи, имя и цену (почти так же, как Instacart показывает продукты, когда вы выбираете магазин. На данный момент я могу только нажать любую ячейку, и появится такое же меню.

Это мой ресторан коллекция просмотр списка контроллер. 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! 
    } 

Мой выпуск e, похоже, немного похоже на этот вопрос. Я последовал за ответом, и я все еще не могу заставить его работать.

Swift: UICollectionView selecting cell indexPath issues

Спасибо.

+0

Как вы отображения ячеек в разных перетекает? –

+0

У меня только одна ячейка прототипа, которую я перечислил в MenuCollectionViewController. Или мне нужно создать 10 разных ячеек для каждого имени ресторана, а затем перечислить каждого в MenuCollectionViewController, чтобы отобразить меню для каждого ресторана? – dechairman

+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) 
+0

Спасибо, Jef. Я попробовал ваше решение, и оно работает. Единственная проблема, с которой я столкнулся сейчас, у меня есть 10 диспетчеров представления коллекции меню, а раскадровка только позволяет мне иметь только один segue от RestaurantCollectionViewCell до MenuCollectionView. Я создал 10 прототипов и перешел к каждому из 10 MenuCollectionViewControllers. Это сработало хорошо, за исключением того, что у меня есть ошибка: «У нескольких ячеек прототипа есть идентификатор:« ManhattanCell ». Я изменил для каждой ячейки, и я могу использовать только один. Это reuseidzntifier в моем коде выше. Как вы думаете, я я здесь делаю неправильно? – dechairman

Смежные вопросы