如何禁用 ScrollView 项目上的多个按钮颜色选择?

Posted

技术标签:

【中文标题】如何禁用 ScrollView 项目上的多个按钮颜色选择?【英文标题】:How do I disable multiple button colour selection on ScrollView Items? 【发布时间】:2018-07-27 18:12:48 【问题描述】:

我正在开发一个照片编辑器移动应用程序,让用户单击滚动视图内的项目以在其上方显示较大的图像。

问题是当我点击多个项目时,它一直显示相同的蓝色。

我要做的是禁用多项选择,以便在滚动视图中的每个项目上一次只显示一种颜色。

这是我一直在从事的功能:

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)


【问题讨论】:

您的问题不清楚?你想达到什么目标? 我想让'button.layer.borderColor'和'button.layer.borderWidth'一次只在一个uiscrollview项目上启用。 请放置屏幕截图以获得预期的输出。 drive.google.com/open?id=1aGOCe2suaPouSlZSH242Iwjsqu68PojU 当我在 uiscrollview 中选择每个项目时,这就是我想要发生的事情。它一次只选择一个项目 【参考方案1】:

好的,你可以像下面这样取一个成员变量。

var lastSelectedButton: UIButton?

现在在filterButtonTapped(sender: UIButton)function 中检查 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.

如有疑问请评论。

【讨论】:

以上是关于如何禁用 ScrollView 项目上的多个按钮颜色选择?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式禁用 ScrollView?

scrollView 上的按钮丢失操作事件

Kivy - 如何在 ModalView 内向 ScrollView 添加多个按钮?

如何使用 Bootstrap v3.4.1 设置禁用(也选中)单选按钮的样式?

Vue.js:根据子组件的状态禁用父组件上的按钮

如何禁用多个按钮?