单击uicollection单元格中的按钮以进行segue

时间:2017-05-06 15:11:47

标签: swift uibutton uicollectionviewcell uistoryboardsegue

A在集合视图中有一个按钮,当我点击按钮时,目标是转向更详细的视图控制器。

 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)

            }  }}

}

然而,它没有做任何事情。我目前有我的单元格设置,当你点击它时,它会分割成一个详细的视图控制器。但单击时单元格内的按钮应该转到不同的详细视图控制器。对于单元格的segue,该信息用于区分didSelectItemAt函数中的内容。我不确定在单元格中为按钮包含segue的功能是什么。

1 个答案:

答案 0 :(得分:0)

您是否可以将您的课程整体包含在内,以便我更好地了解您如何配置视图?我会用我认为会有所帮助的方式更新我的答案,我认为可能会发生一些不同的事情。

<强>更新

试试这个:

  1. 在PinterestLikeCollectionViewCell类中创建并添加按钮。
  2. 制作一个协议,告诉其代表在单击单元格按钮时执行您的操作。
  3. 将WelcomeViewController类指定为该委托并符合协议。