0
votes

A have a button within a collectionviewcell and when I click on the button, the goal is to segue to a more detailed view controller.

 class WelcomeViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate,UIGestureRecognizerDelegate, UISearchBarDelegate {


    @IBOutlet weak var CollectionView: UICollectionView!


    var databaseRef = FIRDatabase.database().reference()
    var loggedInUser = FIRAuth.auth()?.currentUser
    var dictDetails: [String:AnyObject]?
    var posts = NSMutableArray()
    let storage = FIRStorage.storage()


    override func viewDidLoad() {
        super.viewDidLoad()
        (CollectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = CGSize(width: (self.view.frame.width - 10) / 2.4, height: (self.view.frame.width - 10) / 1.5 )
        self.navigationItem.title = "Lit Swap"
        CollectionView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 300)
        self.CollectionView.contentInset = UIEdgeInsetsMake(-65, 0, 0, 0)
        definesPresentationContext = true

        loadData()
    }


    @IBAction func editButtonTapped() -> Void {
        print("Hello Edit Button")
        performSegue(withIdentifier: "UsersProfile", sender: self)

        func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "UsersProfile" {


                self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]


               if let indexPaths = self.CollectionView!.indexPathsForSelectedItems{

                ///I DONT THINK YOU SHOULD REFERENCE POST, REFERENCE BOOKS INSTEAD///////////////

                  //  if let indexPaths = self.CollectionView.cellForItem(at: <#T##IndexPath#>){


                    let vc = segue.destination as! UsersProfileViewController
                    let cell = sender as! UICollectionViewCell
                    let indexPath = self.CollectionView!.indexPath(for: cell)
                    let post = self.posts[(indexPath?.row)!] as! [String: AnyObject]
                  //  let username = post["username"] as? String
                    let userpicuid = post["uid"] as? String
                  //  vc.username = username
                    vc.userpicuid = userpicuid


                    print(indexPath?.row)

                         }} }


    }


    func loadData(){
        if (FIRAuth.auth()?.currentUser) != nil{
            FIRDatabase.database().reference().child("books").observeSingleEvent(of: .value, with: { (snapshot:FIRDataSnapshot) in

                let loggedInUserData = snapshot
                if let postsDictionary = snapshot .value as? [String: AnyObject] {
                    for post in postsDictionary {
                        self.posts.add(post.value)
                    }
                    self.CollectionView.reloadData()


                }})}
    }

    // Properties of the UICollectionView
    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

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

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



        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! PinterestLikeCollectionViewCell


        //configure the cell...

        if (FIRAuth.auth()?.currentUser) != nil{


            print(posts[indexPath.row])
            let post = self.posts[indexPath.row] as! [String: AnyObject]
            cell.Title.text = post["title"] as? String
            cell.Author.text = post["Author"] as? String

            let editButton = UIButton(frame: CGRect(x: 8, y: 225, width: 154, height: 45))

            editButton.addTarget(self, action: #selector(editButtonTapped), for: UIControlEvents.touchUpInside)
            editButton.tag = indexPath.row
            print(indexPath.row)
            editButton.isUserInteractionEnabled = true

            cell.addSubview(editButton)

            if let imageName = post["image"] as? String {

                let imageRef = FIRStorage.storage().reference().child("images/\(imageName)")


                imageRef.data(withMaxSize: 25 * 1024 * 1024, completion: { (data, error) -> Void in
                    if error == nil {

                        let image = UIImage(data: data!)
                        cell.Books.image = image 

                        cell.Books.roundCornersForAspectFit(radius: 10)
                        cell.Books.clipsToBounds = true


                    }else {

                        print("Error downloading image:" )
                    }})}}
        return cell
    }

     func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        return CGSize(width: CGFloat((collectionView.frame.size.width / 5) - 20), height: CGFloat(500))
    }


    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    }



    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "details" {


            self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]


            if let indexPaths = self.CollectionView!.indexPathsForSelectedItems{

                let vc = segue.destination as! BookDetailsViewController
                let cell = sender as! UICollectionViewCell
                let indexPath = self.CollectionView!.indexPath(for: cell)
                let post = self.posts[(indexPath?.row)!] as! [String: AnyObject]
                let Booked = post["title"] as? String
                let Authors = post["Author"] as? String
                let ISBNS = post["ISBN"] as? String
                let Prices = post["Price"] as? String
                let imageNames = post["image"] as? String
                let imagesTwo = post["imageTwo"] as? String
                let imagesThree = post["imageThree"] as? String
                let imagesFour = post["imageFour"] as? String
                let imagesFive = post["imageFive"] as? String
                vc.Booked = Booked
                vc.Authors = Authors
                vc.ISBNS = ISBNS
                vc.Prices = Prices
                vc.imageNames = imageNames
                vc.imagesTwo = imagesTwo
                vc.imagesThree = imagesThree
                vc.imagesFour = imagesFour
                vc.imagesFive = imagesFive

                print(indexPath?.row)

            }  }}

}

However, it does not do anything. I currently have my cell setup that when you click on it, it segues to a detailed view controller. But the button within the cell, when clicked should go to a different detailed view controller. For the cell's segue, the information to segue what put in the didSelectItemAt function. I am not sure what function to include the segue for the button in the cell.

1

1 Answers

0
votes

Can you include your class as whole so I can get a better understanding of how your configuring the views? I'll update my answer with what I think would help, from what there's I think there a few different things that could be happening to cause this.

UPDATE

Try this:

  1. Create and add your button in your PinterestLikeCollectionViewCell class.
  2. Make a protocol that will tell it's delegate to preform your your action when the cell button is clicked.
  3. Assign your WelcomeViewController class as that delegate and conform to the protocol.