Мой сегментированный элемент управления не изменится с 0 на 1. Проблема в том, как я настраиваю элемент управления, или это проблема с операторами if?

#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 )"
                }
            }
            
            
        }
    }
}