在单元格中加载时隐藏/显示@IBOulet @IBAction

时间:2018-12-02 22:30:19

标签: ios swift cell

我试图只让按钮显示出某物的值是否可用。

@IBAction func instagramButtonHide(_ sender: Any) {
    if(self.thisLens.instagramURL.isEmpty){
        addInstagramButton.isHidden = true
    }else{
        let url = URL(string: thisLens.instagramURL)!
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
}

该代码有效,但只有在单击该代码后才能起作用。因此,我想让我们将其放在viewDidAppear中,以便在加载视图时加载它,但是由于它位于单元格中,所以我无法做到这一点。

因此,如果instagramURL的值为空,则我不想显示该按钮。

我觉得有一个简单的解决方法,但是找不到。

@IBOutlet weak var addFacebookButton: UIButton!
@IBOutlet weak var shareButton: UIButton!

var thisLens: WordPressPost!


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code


    addFacebookButton.isHidden = self.thisLens.facebookURL.isEmpty
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

@IBAction func favoriteButtonPressed(_ sender: UIButton) {

}

@IBAction func facebookButtonClicked(_ sender: Any) {
    let url = URL(string: thisLens.facebookURL)!
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

另外一个

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var thisLens: WordPressPost!

    var numberOfPosts = posts.count
    if searchController.isActive {
        numberOfPosts = filteredPosts.count
    }
    if indexPath.row != numberOfPosts {
        var thisPost: WordPressPost
        if searchController.isActive {
            thisPost = filteredPosts[indexPath.row]
        }
        else {
             thisPost = posts[indexPath.row]
        }
        let cell = tableView.dequeueReusableCell(withIdentifier: "lensCell", for: indexPath) as! LensCell

        cell.thisLens = thisPost
        if thisPost.authorName == "" {
            cell.authorNameLabel.text = "No Author"
        }
        else {
            cell.authorNameLabel.text = thisPost.authorName
        }
        if thisPost.title == "" {
            cell.lensNameLabel.text = "No Title"
        }
        else {
            cell.lensNameLabel.text = thisPost.title
        }

        if thisPost.image != nil {
            cell.snapCodeImageView.image = thisPost.image
            cell.imageLoadingIndicator.stopAnimating()
        }
        else {
            cell.snapCodeImageView.image = nil
            cell.imageLoadingIndicator.startAnimating()
            downloadImage(url: URL(string: thisPost.imageURL)!, cellIndexPath: indexPath, wasSearchControllerActive: searchController.isActive, typingUID: currentTypingUID)
        }
        return cell
    }
    else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "loadingCell", for: indexPath) as! LoadingCell
        cell.loadingIndicator.startAnimating()
        return cell
    }
}

2 个答案:

答案 0 :(得分:0)

在单元格中设置按钮的代码不属于IBAction或viewDidAppear()中。它属于您的tableView(_:cellForRowAt:)方法。

您需要设置该方法以完全配置单元。

您应该创建一个自定义单元类,在情节提要中设置一个模板,并将插座连接到模板中的自定义单元类。然后,当您使单元出队时,将其强制转换为自定义类型,并适当设置单元按钮的隐藏状态。

完全解释如何管理表视图超出了论坛的讨论范围。您应该去查找有关该主题的教程,然后继续学习。

答案 1 :(得分:0)

然后在单元格awakeFromNib内执行

addInstagramButton.isHidden = self.thisLens.instagramURL == nil

或在cellForRowAt

let item = ///
cell.addInstagramButton.isHidden = item.instagramURL == nil