Перенесите имя метки Button в UILongPressGestureRecognizer, измените var и верните значение в метку Button - PullRequest
1 голос
/ 02 марта 2020

Помогите мне, пожалуйста. Что я пытаюсь сделать: у меня есть несколько вар и кнопка. Когда я долго нажимаю кнопку, я хочу всплывающее окно с текстовым полем. Затем я хочу ввести некоторое значение (Int), а затем изменить метку моей кнопки на (значение textField + previous). И я хочу написать одну функцию для нескольких кнопок. Что я пытался сделать:

func addLongPressGesture(by sender: UIButton){
    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(longPress(gesture:)))
    longPress.minimumPressDuration = 1
    sender.addGestureRecognizer(longPress)
}

@objc func longPress(gesture: UILongPressGestureRecognizer) {
    if gesture.state == UIGestureRecognizer.State.began {
        print("Long Press")

        var textField = UITextField()
        let alert = UIAlertController(title: "How much?", message: "", preferredStyle: .alert)
        let action = UIAlertAction(title: "Add", style: .default) { (action) in

            if let howMuch = textField.text {
                self.VARIABLE1 = self.VARIABBLE1 + Int(howMuch)!
                self.viewWillAppear(true)
            }
        }
        alert.addAction(action)
        alert.addTextField { (alertTextField) in
            textField = alertTextField
            textField.placeholder = "How much?"
        }
           present(alert, animated: true, completion: nil)
    }
}

Я хочу, чтобы переменная VARIABLE1 менялась в зависимости от того, какую кнопку я долго нажимаю

1 Ответ

0 голосов
/ 02 марта 2020

Похоже, вы объявили несколько переменных, по одной для каждой кнопки. Это хороший признак того, что вы должны начать использовать массивы. Объявите один массив вместо нескольких переменных:

var totals = Array(repeating: 0, count: <however many buttons you have>)

Затем присвойте каждой из ваших кнопок различный tag. Вы также можете установить это в раскадровке. Первая кнопка будет иметь тег 0, вторая кнопка будет иметь тег 1 и т. Д.

В longPress, получите кнопку, на которую нажали gesture.view, и получите тег. Тег - это индекс массива, который вы должны увеличить:

if let howMuch = textField.text {
    self.totals[gesture.view!.tag] += Int(howMuch)! // Note: you should probably unwrap the Int? safely
    self.viewWillAppear(true) // Note: you shouldn't really call this yourself
}
...