#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!