开发者社区> 问答> 正文

从另一个函数快速访问UIView实例

在我的项目中,用户可以UIView
(“CustomWishilstView”)如下:

func createCustomWishlistView() -> CustomWishlistView {
    let v = CustomWishlistView()
    v.translatesAutoresizingMaskIntoConstraints = false
    v.backgroundColor = .darkGray
    v.layer.cornerRadius = 30
    return v
}

@IBAction func createListButtonTapped(_ sender: Any) {


    // "Liste erstellen" button was tapped
    self.appDidEnterBackgroundHandler()

    if let txt = listNameTextfield.text {

        self.newListTextfield.resignFirstResponder()

        // append user-entered text to the data array
        self.theData.append(txt)
        self.imageData.append(self.image!)

        let theCustomWishlistView = createCustomWishlistView()

        self.view.addSubview(theCustomWishlistView)
        // constrain CustomWishlistView
        theCustomWishlistView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 120.0).isActive = true
        theCustomWishlistView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        theCustomWishlistView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 30.0).isActive = true
        theCustomWishlistView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -30.0).isActive = true
        theCustomWishlistView.wishlistImage.image = self.image
        theCustomWishlistView.wishlistLabel.text = txt
        theCustomWishlistView.transform = CGAffineTransform(translationX: 0, y: 1000)

        self.view.bringSubviewToFront(containerView)


        // reload the collection view
        theCollectionView.reloadData()
        theCollectionView.performBatchUpdates(nil, completion: {
            (result) in
            // scroll to make newly added row visible (if needed)
            let i = self.theCollectionView.numberOfItems(inSection: 0) - 1
            let idx = IndexPath(item: i, section: 0)
            self.theCollectionView.scrollToItem(at: idx, at: .bottom, animated: true)

            // close (hide) the "New List" view
            self.closeButtonTappedNewList(nil)
        })
    }
}

I transformview 所以一开始是看不见的。应该在用户单击cell
在一个UICollectionView ...我的代码(里面)cellForItemAt )看起来是这样的:

if indexPath.item <= theData.count {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ContentCell", for: indexPath) as! ContentCell

         cell.testLabel.text = theData[indexPath.item - 1]

         cell.buttonView.setImage(imageData[indexPath.item - 1], for: .normal)

     cell.customWishlistTapCallback = {
         // let CustomWishlistView appear
//            UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn, animations: {
//                theCustomWishlistView.transform = CGAffineTransform(translationX: 0, y: 0)
//            })
         // let welcomeText disappear
         UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: {
             self.welcomeTextLabel.transform = CGAffineTransform(translationX: 0, y: 0)
         })
     }
        return cell
    }

我的问题是我不能让我的customWishlistView
出现是因为我无法访问它。有办法解决这个问题吗?

展开
收起
游客5akardh5cojhg 2019-12-04 14:08:08 420 0
1 条回答
写回答
取消 提交回答
  • 你需要theCustomWishlistView一个实例变量,如下所示。您没有显示整个类代码,所以我的解决方案是尽可能完整的,而不需要看到其余的代码

    class CustomViewController: UIViewController, UICollectionViewDataSource {
    
        var theCustomWishlistView: UIView?
    
        func createCustomWishlistView() -> CustomWishlistView {
            let v = CustomWishlistView()
            v.translatesAutoresizingMaskIntoConstraints = false
            v.backgroundColor = .darkGray
            v.layer.cornerRadius = 30
            return v
        }
    
        @IBAction func createListButtonTapped(_ sender: Any) {
    
            // "Liste erstellen" button was tapped
            self.appDidEnterBackgroundHandler()
    
            if let txt = listNameTextfield.text {
    
                self.newListTextfield.resignFirstResponder()
    
                // append user-entered text to the data array
                self.theData.append(txt)
                self.imageData.append(self.image!)
    
                let wishlistView = createCustomWishlistView()
    
                self.view.addSubview(wishlistView)
                // constrain wishlistView
                wishlistView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 120.0).isActive = true
                wishlistView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
                wishlistView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 30.0).isActive = true
                wishlistView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -30.0).isActive = true
                wishlistView.wishlistImage.image = self.image
                wishlistView.wishlistLabel.text = txt
                wishlistView.transform = CGAffineTransform(translationX: 0, y: 1000)
    
                // retain wishlist view in instance variable
                self.theCustomWishlistView = wishlistView
                self.view.bringSubviewToFront(containerView)
    
                // reload the collection view
                theCollectionView.reloadData()
                theCollectionView.performBatchUpdates(nil, completion: {
                    (result) in
                    // scroll to make newly added row visible (if needed)
                    guard let i = self.theCollectionView.numberOfItems(inSection: 0) else { return }
                    let idx = IndexPath(item: i - 1, section: 0)
                    self.theCollectionView.scrollToItem(at: idx, at: .bottom, animated: true)
                    // close (hide) the "New List" view
                    self.closeButtonTappedNewList(nil)
                })
    
            }
        }
    
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return theData.count
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
           let _cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ContentCell", for: indexPath)
    
            guard let cell = _cell as? ContentCell else { return _cell }
    
            cell.testLabel.text = theData[indexPath.item - 1]
    
            cell.buttonView.setImage(imageData[indexPath.item - 1], for: .normal)
    
            cell.customWishlistTapCallback = {
                // let CustomWishlistView appear
                UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseIn, animations: {
                    self.theCustomWishlistView?.transform = CGAffineTransform(translationX: 0, y: 0)
                })
                // let welcomeText disappear
                UIView.animate(withDuration: 0.2, delay: 0, options: .curveEaseOut, animations: {
                    self.welcomeTextLabel.transform = CGAffineTransform(translationX: 0, y: 0)
                })
            }
           return cell
       }
    
    }
    
    2019-12-04 14:09:34
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载