Swift - обновление и сохранение положения нескольких программно созданных кнопок - PullRequest
0 голосов
/ 18 октября 2018

У меня есть кнопка, которая создает другие кнопки на основе класса Clip, показанного ниже.Эти вновь созданные кнопки добавляются в массив и сохраняются в списке.

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 сохраняются в листе.

@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
    }
}

Выше работает только если я создаю одну кнопку.Когда добавлено больше кнопок, приведенные выше строки изменяют только первый клип из массива.Мне нужен способ обновить значение до правильного нажатия кнопки.

Как определить позицию массива кнопки нажатия, когда я создаю их все программно?В данный момент я помещаю значение 0 в clipArray.

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

Я даже не уверен, что использование plist - лучший способ сохранить кнопки в первую очередь.

Любая помощь или документация будет высоко ценится.Спасибо

1 Ответ

0 голосов
/ 22 октября 2018

Исходя из ответа 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
...