#swift #xcode
#swift #xcode
Вопрос:
Я добавляю сегментированный элемент управления, который может переключаться с женского (0) на мужской (1). Он предназначен для приложения для питания, поэтому в нем есть диапазон для здорового количества сахара, которое различается у мужчин и женщин. Он выполняет вычисление, в результате которого получается значение 1, 2 или 3 (значение сахара). есть текстовое поле, в котором вводится количество потребляемого сахара, и метка, которая показывает 1, 2 или 3. Это работает для женщин, но значение сахара для мужчин всегда такое же, как и для женщин. Я не знаю, связана ли проблема с изменением сегментированного элемента управления или с операторами if. Я очень новичок в этом, поэтому, пожалуйста, наберитесь терпения.
@IBOutlet weak var controller: UISegmentedControl!
@IBOutlet weak var sugarField: UITextField!
@IBOutlet weak var label: UILabel!
var calorieRatio = 1.0
var sugarValue = 1.0
var sugarValueM = 5.0
@IBAction func changeLb(_ sender: Any)
{
let sugarFieldConv :Double = Double(sugarField.text!)!
if controller.selectedSegmentIndex == 0 {
if sugarFieldConv >= 16.8 * calorieRatio { sugarValue = 1.0
}
if sugarFieldConv <= 8.3 * calorieRatio { sugarValue = 3.0
}
if sugarFieldConv > 8.3 * calorieRatio amp;amp; sugarFieldConv < 16.8 * calorieRatio { sugarValue = 2.0
}
else if controller.selectedSegmentIndex == 1 {
if sugarFieldConv >= 25 * calorieRatio { sugarValueM = 1.0
}
if sugarFieldConv <= 12.5 * calorieRatio { sugarValueM = 3.0
}
if sugarFieldConv > 12.5 * calorieRatio amp;amp; sugarFieldConv < 25 * calorieRatio { sugarValueM = 2.0
}
}
if controller.selectedSegmentIndex == 0 { label.text = "( sugarValue )" }
if controller.selectedSegmentIndex == 1 { label.text = "( sugarValueM )" }
}
}
}
Ответ №1:
Похоже, вы забыли включить фигурную скобку прямо перед else if controller.selectedSegmentIndex == 1
этим. И тогда ваша вторая, но последняя фигурная скобка не нужна.
Ответ №2:
Похоже, что ваш код всегда будет выдавать одно значение, поскольку это let и никаких действий не предпринимается или не обновляется, это не похоже на TableView, в TableView вы можете использовать TableView.reloadData() для обновления значений, но здесь нет ничего, что можно было бы обновить.
Вы можете использовать его с кнопками, подобными изображению: «Проверьте второе решение, используя сегментированный»
с помощью приведенного ниже кода:
var sugarFieldConv :Double = 0.0
@IBOutlet weak var sugarField: UITextField!
@IBOutlet weak var label: UILabel!
var calorieRatio = 1.0
var sugarValue = 1.0
var sugarValueM = 5.0
@IBAction func maleActionbtn(_ sender: Any) {
sugarFieldConv = Double(sugarField.text!)!
if sugarFieldConv >= 16.8 * calorieRatio { sugarValue = 1.0
}
else if sugarFieldConv <= 8.3 * calorieRatio { sugarValue = 3.0
}
else if sugarFieldConv > 8.3 * calorieRatio amp;amp; sugarFieldConv < 16.8 * calorieRatio {
sugarValue = 2.0
}
label.text = "( sugarValue )"
}
@IBAction func femaleActionbtn(_ sender: Any) {
sugarFieldConv = Double(sugarField.text!)!
if sugarFieldConv >= 25 * calorieRatio {
sugarValueM = 1.0
}
else if sugarFieldConv <= 12.5 * calorieRatio {
sugarValueM = 3.0
}
else if sugarFieldConv > 12.5 * calorieRatio amp;amp; sugarFieldConv < 25 * calorieRatio {
sugarValueM = 2.0
}
label.text = "( sugarValueM )"
}
}
Или вы можете использовать segmented, но без использования его действия вам понадобится кнопка, но у вас все еще есть и используйте свой сегментированный, как изображение:
Код:
class SegmentedViewControllerII: UIViewController {
@IBOutlet weak var controller: UISegmentedControl!
@IBOutlet weak var sugarField: UITextField!
@IBOutlet weak var label: UILabel!
var calorieRatio = 1.0
var sugarValue = 0.0
var sugarValueM = 0.0
var sugarFieldConv = 0.0
@IBAction func changeLb(_ sender: Any)
{
//
// if controller.selectedSegmentIndex == 0 {
// label.text = "( sugarValue )"
//
// }
// else if controller.selectedSegmentIndex == 1 {
// label.text = "( sugarValueM )"
//
// }
}
@IBAction func buttonCalculate(_ sender: Any) {
sugarFieldConv = Double(sugarField.text!)!
if controller.selectedSegmentIndex == 0 {
if sugarFieldConv >= 16.8 * calorieRatio {
sugarValue = 1.0
label.text = "( sugarValue )"
}
else if sugarFieldConv <= 8.3 * calorieRatio {
sugarValue = 3.0
label.text = "( sugarValue )"
}
else if sugarFieldConv > 8.3 * calorieRatio amp;amp; sugarFieldConv < 16.8 * calorieRatio {
sugarValue = 2.0
label.text = "( sugarValue )"
}
else if controller.selectedSegmentIndex == 1 {
if sugarFieldConv >= 25 * calorieRatio {
sugarValueM = 1.0
label.text = "( sugarValueM )"
}
else if sugarFieldConv <= 12.5 * calorieRatio {
sugarValueM = 3.0
label.text = "( sugarValueM )"
}
else if sugarFieldConv > 12.5 * calorieRatio amp;amp; sugarFieldConv < 25 * calorieRatio {
sugarValueM = 2.0
label.text = "( sugarValueM )"
}
}
}
}
}