Как увеличить значение метки с помощью stepper?

#ios #swift #swift4 #uistepper

#iOS #swift #swift4 #uistepper

Вопрос:

У меня есть, priceLabel которое имеет Food свойство price . Я хочу увеличить это priceLabel , используя это первое значение. Например, первое значение priceLabel равно 15.00, и когда пользователь нажимает stepper и первое значение увеличивается с ним, это собственное значение. (например, 2 нажатия для увеличения 15 15 = 30 )

Я думаю, что stepper.stepValue = priceLabel.text

Вот мои коды

 import UIKit
class DetailViewController: UIViewController {

@IBOutlet weak var foodTitle: UILabel!
@IBOutlet weak var foodSubTitle: UILabel!
@IBOutlet weak var foodPiece: UILabel!
@IBOutlet weak var foodPrice: UILabel!
@IBOutlet weak var drinkPicker: UITextField!
@IBOutlet weak var constantPieceLabel: UILabel!

var menuPieceStepper : UIStepper!
var drinkPickerView = UIPickerView()

var selectDrinkType: [String] = []
var detailFoodName : [String] = []
var detailFoodPrice : [Double] = [0.0]

var constPiece = 0

let foods = Food(name: ["Hamburger big mac",
                           "Patates",
                           "Whopper",
                           "Steakhouse"], price: [15.0, 20.0, 25.0, 30.0])
  

Мне нужно использовать @IBAction или #selector ?

 @IBAction func foodPieceStepper(_ sender: UIStepper) {
    foodPrice.text = Double(sender.value).description
}

@objc func foodPieceChangeStepper() {

    foodPrice.text = "(menuPieceStepper.value)"
}

//TODO:- Add to basket
@IBAction func addBasket(_ sender: Any) {

        let destinationVC = MyCartViewController()

        destinationVC.fromDetailFoodNames = foods.name
        destinationVC.fromDetailFoodPrices = foods.price

    dismiss(animated: true)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if(segue.identifier == "addToCartSegue") {
        if let addToCartVC = segue.destination as? MyCartViewController {


            addToCartVC.fromDetailFoodNames = foods.name
            addToCartVC.fromDetailFoodPrices = foods.price

    }
   }
}

override func viewDidLoad() {
    super.viewDidLoad()

    menuPieceStepper = UIStepper()
    menuPieceStepper.value = 0.0
    menuPieceStepper.minimumValue = 0.0
    menuPieceStepper.maximumValue = 30.0
    menuPieceStepper.stepValue = foods.price.first!
    menuPieceStepper.addTarget(self, action: #selector(foodPieceChangeStepper), for: .valueChanged)

    foodPieceChangeStepper()

    drinkPickerView.delegate = self
    drinkPicker.inputView = drinkPickerView
    selectDrinkType = ["Ayran", "Kola", "Su", "Fanta", "Şalgam", "Sprite"]

    foodTitle.text = detailFoodName.description
    foodPrice.text = detailFoodPrice.description

    self.navigationController?.navigationItem.title = "Sipariş Detayı"

}

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.navigationBar.isHidden = false

}

override func viewWillDisappear(_ animated: Bool) {
    self.navigationController?.navigationBar.isHidden = true
}

}
  

Ответ №1:

Использование Selector / IBAction не имеет никакого значения

 @objc func foodPieceChangeStepper() { 
  let res = menuPieceStepper.value * foods.price.first!
  foodPrice.text = "(res)"
}
  

Затем вы должны установить значение step равным

 menuPieceStepper.stepValue = 1.0
  

и внутри действия stepper

 menuPieceStepper.value * currentPiecePrice
  

Комментарии:

1. Я не хочу увеличиваться с постоянным значением, подобным 15.0 . Мне нужно указать свое Food(price:[15.0] значение цены. menuPieceStepper.value * menuPieceStepper.value . Ваше значение не изменилось

2. Цены на продукты питания, поступающие из Food моделей, остаются неизменными price array . Когда я нажимаю на ячейку табличного представления MainViewController , цена переходит к моей DetailViewController ценовой метке. DetailViewController Торговая точка priceLabel динамически изменяет, в какой ячейке выбрана MainVC . Этот случай — добавить в мою корзину продукты с помощью piece. Одна часть стоит 20,00 $, а при увеличении stepper на 2 цена составляет 40,00 $

3. Я не понимаю часть «и внутри действия stepper» и menuPieceStepper.value * currentPiecePrice . Константа res уже изменена на ` menuPieceStepper.value * menuPieceStepper.value . Why we change stepper action again to menuPieceStepper.value * currentPiecePrice` ?

4. в соответствии с вашими значениями min / MaxValue stepper вы получите значения из 0 — 30 это значение увеличивается на шаг, поэтому вам нужно умножить его на текущую подробную цену, отправленную из mainVC

5. это = foods.price.first!