Как передать информацию новому контроллеру представления, используя переход в swift - PullRequest
0 голосов
/ 06 марта 2020

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

Я новичок в Swift. Это как-то связано с indexPath, который я использовал в функции для заполнения представления коллекции? Я попытался выяснить, смогу ли я получить indexPath, а затем передать его в массив изображений, чтобы получить имя и отправить имя во второй контроллер представления, но оно получается равным нулю. Любая помощь будет принята с благодарностью *

class Data {

    let images = ["bear", "bird", "bridge", 
                  "cabin"]
}

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Попробуйте это

class ImagePickerViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {

    @IBOutlet var collectionView: UICollectionView!

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return DataImage.images.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionViewCell", for: indexPath) as? CollectionViewCell {
            cell.imageView.image = UIImage(named: DataImage.images[indexPath.item])
            return cell
        }
        return UICollectionViewCell()
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        collectionView.delegate = self
        collectionView.dataSource = self
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let dest = segue.destination as? FeedPickerViewController{
            if segue.identifier == "detailViewController_segue"{
                let cell = sender as! CollectionViewCell
                let indexPath = self.collectionView.indexPath(for: cell)
                let imgName = DataImage.images[indexPath!.item]
                dest.imgName = imgName
            }
        } 
    }
}
class DetailViewController: UIViewController {
    var imgName: String!

    @IBOutlet var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        label.text = "Posting Image: " + imgName
    }
}
  • Используйте struct вместо Класс
struct DataImage {

    static var images = ["bear", "bird", "bridge", "cabin"]
}
0 голосов
/ 06 марта 2020

Вы должны запомнить indexPath, который является выбранной ячейкой

. Вы можете использовать collectionView:didSelectItemAtIndexPath: для извлечения индекса выбранной ячейки.

selectedIndexPath = indexPath

, а затем передать данные выбранной ячейки. используя выбранный IndexPath для конечного контроллера вида

dest.imageName = images.images[selectedIndexPath!.item]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...