2017-01-11 2 views
-2

Я создал CollectionView программно и передал им изображения. Теперь, при нажатии на каждое изображение, мне нужно открыть следующий каждый контроллер представления соответственно. Я новичок в Swift, и я не мог найти возможные решения для этого в Swift 3. Я попытался сделать это для четвертого «todolistbutton» изображения, но он показал мне ошибку. Любой может помочь мне здесь в Swift 3 ?? Мой код:Связывание элементов коллекции с новым контроллером

import UIKit 

class MeBottomViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 



@IBOutlet weak var collectionView: UICollectionView! 


let imageArray = [UIImage(named: "guidebutton"), UIImage(named: "mybellybutton"), UIImage(named: "appointmentbutton"), UIImage(named: "todolistbutton"), UIImage(named: "duedatebutton"), UIImage(named: "myweightbutton")] 


override func viewDidLoad() { 
    super.viewDidLoad() 

    let tap = UITapGestureRecognizer(target: self, action: #selector(tappedme)) 
    imageArray[3].addGestureRecognizer(tap) // Error: Value of type 'UIImage?' has no member 'addGestureRecognizer' 

    imageArray[3].userInteractionEnabled = true // Error: Value of type 'UIImage?' has no member 'userInteractionEnabled' 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    return 6 
} 


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cells = collectionView.dequeueReusableCell(withReuseIdentifier: "cells", for: indexPath as IndexPath) as! SecondCollectionViewCell 

    cells.imageView?.image = self.imageArray[indexPath.row] 

    return cells 
} 

func tappedme() { 


    let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "ToDoTableViewController") as! ToDoTableViewController 

    self.navigationController?.pushViewController(secondViewController, animated: true) 


} 
} 
+0

Вы хотите добавить 'UITapGestureRecognizer' в' UIImageView', но вы пытаетесь добавить их в 'UIImage' ... –

+0

Можете ли вы, пожалуйста, разработать ур-ответ, поскольку я дал все коды там? Мне нужно открывать контроллеры просмотра отдельно при нажатии на каждое изображение. Я новичок в быстроте. Plzzz .... Спасибо заранее. –

ответ

0

Вам не нужно устанавливать какие-либо жест

import UIKit 

class MeBottomViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 



@IBOutlet weak var collectionView: UICollectionView! 


let imageArray = [UIImage(named: "guidebutton"), UIImage(named: "mybellybutton"), UIImage(named: "appointmentbutton"), UIImage(named: "todolistbutton"), UIImage(named: "duedatebutton"), UIImage(named: "myweightbutton")] 


override func viewDidLoad() { 
super.viewDidLoad() 




} 

override func didReceiveMemoryWarning() { 
super.didReceiveMemoryWarning() 
// Dispose of any resources that can be recreated. 
} 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

return 6 
} 


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

let cells = collectionView.dequeueReusableCell(withReuseIdentifier: "cells", for: indexPath as IndexPath) as! SecondCollectionViewCell 

cells.imageView?.image = self.imageArray[indexPath.row] 

return cells 
} 


} 



func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 

{ 

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "ToDoTableViewController") as! ToDoTableViewController 

self.navigationController?.pushViewController(secondViewController, animated: true) 


} 
+0

Как он сказал, он хочет добавить tapgesture, если у него есть другой контент в его камере, может быть, я не хочу запускать его новый контроллер на прослушивание сотовых. Это решение также является обходным решением –

+0

, но он сказал, что передал только изображения в коллекцию, и в его коде нет другого контента. Вот почему я предлагаю ему это. В противном случае я согласен с вашим ответом @ jimmy James –

+0

Конечно, ваше редактирование работает так же, как мое :) Теперь, мы просто ждем его обратной связи –

0

Вы не добавить UITapGestureRecognizer к UIImage. Так что вам нужно добавить UITapGestureRecognizer на вашем UIImageView как:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cells = collectionView.dequeueReusableCell(withReuseIdentifier: "cells", for: indexPath as IndexPath) as! SecondCollectionViewCell 
    cells.imageView?.image = self.imageArray[indexPath.row] 

    // Tap gesture 
    let tap = UITapGestureRecognizer(target: self, action: #selector(tappedme)) 
    cells.imageView!.addGestureRecognizer(tap) 

    return cells 
} 

Тогда просто пусть пусто viewDidLoad:

override func viewDidLoad() { 
    super.viewDidLoad() 
} 
+0

Я как раз собирался публиковать ... Это тоже не работает на симуляторе. Это не показывает никакого эффекта .... @ Jimmy James –

+0

Вы пытались поставить Breakpoint на Xcode в методе 'cellForItemAt'? –

+0

Да ... Я оставил точку останова в func collectionView (_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {.... Его нормальный и не показывает никакой ошибки !!! @ Jimmy James –

0
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 

{ 

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "ToDoTableViewController") 

?.pushViewController(secondViewController, animated: true) 
} 

@ matloob Hasnain. Теперь он наконец-то сработал. Мне пришлось снимать как! ToDoTableViewController.

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