ios - 如何禁用 ScrollView 项目上的多个按钮颜色选择?
问题描述
我正在开发一个照片编辑器移动应用程序,让用户单击滚动视图内的项目以在其上方显示较大的图像。
问题是当我点击多个项目时,它一直显示相同的蓝色。
我要做的是禁用多项选择,以便在滚动视图中的每个项目上一次只显示一种颜色。
这是我一直在使用的功能:
func ScrollFunctions() {
var xCoord: CGFloat = 13
let yCoord: CGFloat = 7
let buttonWidth:CGFloat = 60
let buttonHeight: CGFloat = 60
let gapBetweenButtons: CGFloat = 5
var itemCount = 0
for i in 0..<CIFilterNames.count {
itemCount = i
// Button properties
let filterButton = UIButton(type: .custom)
filterButton.frame = CGRect(xCoord, yCoord, buttonWidth, buttonHeight)
filterButton.tag = itemCount
filterButton.addTarget(self, action: #selector(LooksViewController.filterButtonTapped(sender:)), for: .touchUpInside)
filterButton.layer.cornerRadius = 0
filterButton.clipsToBounds = true
// Create filters for each button
currentFilter = CIFilter(name: "\(CIFilterNames[i])" )
let ciContext = CIContext(options: nil)
let coreImage = CIImage(image: imagePassed)
let filter = CIFilter(name: "\(CIFilterNames[i])" )
filter!.setDefaults()
filter!.setValue(coreImage, forKey: kCIInputImageKey)
let filteredImageData = filter!.value(forKey: kCIOutputImageKey) as! CIImage
let filteredImageRef = ciContext.createCGImage(filteredImageData, from: filteredImageData.extent)
let imageForButton = UIImage(cgImage: filteredImageRef!);
// Assign filtered image to the button
filterButton.setBackgroundImage(imageForButton, for: .normal)
// Add Buttons in the Scroll View
xCoord += buttonWidth + gapBetweenButtons
filtersScrollView.addSubview(filterButton)
}
// Resize Scroll View
filtersScrollView.contentSize = CGSize(buttonWidth * CGFloat(itemCount+2), yCoord)
}
这是您点击滚动视图项目时的功能。在这里,我一直在尝试使用“if else”语句,例如按钮是否选择显示边框宽度和颜色,否则返回 false,但这没有用。有任何想法吗?
@objc func filterButtonTapped(sender: UIButton) {
let button = sender as UIButton
button.layer.borderWidth = 2
button.layer.borderColor = #colorLiteral(red: 0.1882352941, green: 0.6392156863, blue: 0.6705882353, alpha: 1)
imgView.image = imagePassed
toolBar.isHidden = true
yesAndNoToolBar.isHidden = false
imgView.image = button.backgroundImage(for: UIControlState.normal)
}
解决方案
好的,你可以像下面这样取一个成员变量。
var lastSelectedButton: UIButton?
现在在filterButtonTapped(sender: UIButton)
函数中检查 lastSelectedButton
let button = sender as UIButton
if let button1 = lastSelectedButton {
// Deselect or reset this button1 color.
}
lastSelectedButton = button
// Do your stuff here what you are doing now.
如果有任何疑问请评论。
推荐阅读
- r - r- dummyVars 中的重复行
- php - PHP如何通过while循环进行Whileloop
- python-3.x - Python - For 循环(两个并行迭代)
- java - 获取数组中单词的第一个字母以大写
- c# - C#如何仅从没有扩展名的文件夹中获取.pdf文件名?
- html - 如何在 Angular 项目的 html 组件之间传递字符串变量作为参数?
- unity3d - ..的统一变量尚未分配
- c - Linux 套接字:第二次 read() 在 localhost 上失败
- matlab - 细节特征提取算法
- python - 如何从控制台为模型创建对象,类似于 Django 如何创建 createsuperuser 命令