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 - 更新和存储多个以编程方式创建的按钮的位置的主要内容,如果未能解决你的问题,请参考以下文章