iOS Swift:如何在 UIViewController 中隐藏和显示按钮

Posted

技术标签:

【中文标题】iOS Swift:如何在 UIViewController 中隐藏和显示按钮【英文标题】:iOS Swift: How to hide and reveal a button in UIViewController 【发布时间】:2018-08-12 18:16:28 【问题描述】:

我有一个显示主题列表的工厂UICollectionView

在标题中,我有 3 个按钮“filter”、“clear”和“back

这些按钮都是在storyboard 中创建的,没有链接IBOutlets(见下文)。 “filter”和“back”按钮链接到 Segue/Dismiss Segue,“clear”按钮作为链接到它的IBAction

filter”按钮会弹出另一个viewcontroller (tableview),用户可以在其中选择各种“filters”,当返回collectionview 时,主题为“filtered”。很好用。

clear”按钮清除已应用于视图集合的所有过滤器。按下此按钮后,所有过滤器都将被删除,viewcontroller 会重新加载。再次工作可爱。

但我希望隐藏“clear”按钮,除非已应用过滤器。目前,“filter”和“clear”按钮都从一开始就显示出来。我很高兴过滤器按钮始终存在,因为我希望用户能够随时应用/调整过滤器。但我只希望在应用过滤器时显示“clear”按钮。因此,我不希望在启动时或按下“clear”按钮后出现“clear button”……直到使用下一个过滤器。

我通常只是将IBOutlet 链接到一个按钮,并设置它的isHidden 属性,如果我想在各个点hide/unhide 它。但是,由于出现错误,我似乎无法做到这一点:

"invalid repeating content' when I link a IBOutlet to the 'clear' button in the header.

我尝试创建一个子类UICollectionViewCell 并从那里创建IBOutlet。效果很好,我可以链接到按钮(我尝试了所有 3 个或只是 'clear button' 的组合。但是,'filter' 和 'back' 按钮的 segues 不再被触发。

我正在寻找一种方法来隐藏/取消隐藏“清除”按钮,同时保持 segue/dismiss 触发器仍然有效。

我将不胜感激朝正确的方向戳。

注意:我没有包含任何代码,因为 UICollectionView 没有什么特别之处

【问题讨论】:

【参考方案1】:

您可以通过viewWithTag() 访问UIButton,然后更改它的.isHidden 属性。记得在 storyboard 中设置 Tag。

view.viewWithTag(insertYourTagHere).isHidden = false

老实说,添加 IBOutltes 会好得多。

【讨论】:

非常感谢。我使用了 Tag 选项并让它工作得很好。我同意它在某些方面不是很优雅,我肯定不是最佳实践。如果有人可以就使用 IBOutlets 的“更正确(原文如此)”方法提出建议,我将不胜感激

以上是关于iOS Swift:如何在 UIViewController 中隐藏和显示按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何使用swift在UITableView中有UITextFields时管理键盘?

iOS 开发--转场动画

一个 UIView Swift 中的多个 TableViews - 如何同时显示

UIPopoverPresentationController

游戏中心登录 Swift

无法将 JSON 响应分配给预先声明的数组