swift - 如何在 UIStackView Swift 4 中查找所选按钮的索引
问题描述
我试图在我的堆栈视图中找到所选按钮的索引。目前,我正在尝试通过在按钮上使用标签来做到这一点。最终目标是当长按手势停止时,无论选择堆栈视图的值如何,但目前,我的案例开关正在打印所有值,而不是选定的值。我使用它而不是 collectionView 或 tableView 因为我发现实现动画要容易得多。
按钮设置
let likeButton = UIButton(type: .system)
likeButton.setImage(#imageLiteral(resourceName: "blue_like").withRenderingMode(.alwaysOriginal), for: .normal)
likeButton.tag = 0
let heartButton = UIButton(type: .system)
heartButton.setImage(#imageLiteral(resourceName: "red_heart").withRenderingMode(.alwaysOriginal), for: .normal)
heartButton.tag = 1
let wowButton = UIButton(type: .system)
wowButton.setImage(#imageLiteral(resourceName: "surprised").withRenderingMode(.alwaysOriginal), for: .normal)
wowButton.tag = 2
let laughButton = UIButton(type: .system)
laughButton.setImage(#imageLiteral(resourceName: "cry_laugh").withRenderingMode(.alwaysOriginal), for: .normal)
laughButton.tag = 3
let sadButton = UIButton(type: .system)
sadButton.setImage(#imageLiteral(resourceName: "cry").withRenderingMode(.alwaysOriginal), for: .normal)
sadButton.tag = 4
let angryButton = UIButton(type: .system)
angryButton.setImage(#imageLiteral(resourceName: "angry").withRenderingMode(.alwaysOriginal), for: .normal)
angryButton.tag = 5
let buttons = [likeButton, heartButton, wowButton, laughButton, sadButton, angryButton]
长按手势结束
else if gesture.state == .ended {
// clean up the animation
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
let stackView = self.iconsContainerView.subviews.first
stackView?.subviews.forEach({ (button) in
button.transform = .identity
switch button.tag {
case 0:
print("like button")
case 1:
print("Heart")
case 2:
print("Wow")
case 3:
print("Laugh")
case 4:
print("Sad")
case 5:
print("Angry")
default:
fatalError("Oops, this should not happen")
}
})
self.iconsContainerView.transform = self.iconsContainerView.transform.translatedBy(x: 0, y: 50)
self.iconsContainerView.alpha = 0
}, completion: { (_) in
self.iconsContainerView.removeFromSuperview()
})
}
解决方案
您最好的选择可能是在每个按钮上附加一个长按手势并签gesture.view
入回调。
请参阅:UIButton 长按事件
推荐阅读
- javascript - 无法隐式转换 System.LINQ 存在显式转换您是否缺少演员表
- visual-studio-code - VS Code 不排除 Code 的 node_modules 被监视 - 文件监视限制已达到
- java - 如何解决Android上的应用程序安装错误“Package name null is not an installed package”
- nginx - 使用 nginx auth_basic + react app 找不到页面重新加载导致 404
- python - 使用熊猫连接系列数据时出现奇怪的错误
- angular - 角材料 - 垫表 - 消耗 API
- javascript - HTML、CSS、JavaScript 模式和许多页面
- android - Android - Kotlin - Retrofit2 | @Query 不工作
- spring - Spring实体到DTO的转换
- windows - 在 Docker 中启动 tomcat 时无法在端口 8080 上打开网页