Swift - 更新和存储多个以编程方式创建的按钮的位置

Posted

技术标签:

【中文标题】Swift - 更新和存储多个以编程方式创建的按钮的位置【英文标题】:Swift - Update and store position of a multiple programmatically created buttons 【发布时间】:2018-10-18 03:50:09 【问题描述】:

我有一个按钮,它可以根据下面看到的 Clip 类创建其他按钮。那些新创建的按钮被添加到一个数组中并存储在一个 plist 中。

class Clip: Encodable, Decodable 
var name: String = ""
var xCoordinate: Int = 100
var yCoordinate: Int = 300
// more parameter will be added later on e.g color, scale etc..

每个按钮都可以在视图中移动,新的 x 和 y 坐标存储在 plist 中。

@objc func handlePan(sender: UIPanGestureRecognizer)

    let uIViewSelected = sender.view!

    switch sender.state 
    case .began, .changed :
        moveViewWithPan(view: uIViewSelected, sender: sender)
        break
    case .ended:
      //Finds the position when the button is no longer being dragged

        let x = Int(uIViewSelected.center.x)
        let y = Int(uIViewSelected.center.y)

      //clipArray[0] need to be the corresponding clicked button e.g clipArray[2]

        clipArray[0].xCoordinate = x
        clipArray[0].yCoordinate = y
        saveData()
        break
    default:
        break
    

仅当我创建一个按钮时,上述内容才有效。添加更多按钮时,上述行仅更改数组中的第一个剪辑。我需要一种将值更新为单击的正确按钮的方法。

当我以编程方式创建所有单击按钮时,如何识别单击按钮的数组位置?目前我将 clipArray 的值设置为 0。

 clipArray[0].xCoordinate = x
 clipArray[0].yCoordinate = y

我什至不确定是否首先使用 plist 是存储按钮的最佳方式。

任何帮助或文档将不胜感激。 谢谢

【问题讨论】:

不确定这是否有帮助,但您是否考虑过使用任何 UIView 所具有的 tag 属性? 感谢 dfd,从它的外观上看可以。我稍后会尝试。 Dfd 感谢它目前确实有效。我需要做进一步的测试。感谢您的帮助 【参考方案1】:

根据 dfd 响应,我为每个创建的按钮添加了标签,现在它解决了这个问题。

        let x = Int(uIViewSelected.center.x)
        let y = Int(uIViewSelected.center.y)
        //clipArray.append(clip)

        var tagNo = uIViewSelected.tag

        clipArray[tagNo].xCoordinate = x
        clipArray[tagNo].yCoordinate = y

【讨论】:

以上是关于Swift - 更新和存储多个以编程方式创建的按钮的位置的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式创建多个按钮和操作?

Swift以编程方式制作宽度百分比

Swift 3 使用 UINavBar 按钮显示以编程方式创建的 datePicker

Swift - 以编程方式创建视图问题,无法找到存储的属性

如何在swift中使用for循环以编程方式创建按钮

StackView 中的按钮约束(以 Swift 编程方式)