首页 > 解决方案 > 从另一个视图控制器访问分段控件选定的索引

问题描述

我正在开发一个当前有 2 个视图控制器的应用程序。在第二个视图控制器(我用于设置)中,我使用分段控件来确定游戏的难度。设置视图控制器的目的是更改主视图控制器标签。我遇到的问题是我找不到将段控件的选定索引值从第二个视图控制器带到主视图控制器的方法。

这是设置屏幕视图控制器:

    public class SettingsScreen: UIViewController {
    
    @IBOutlet weak var levelPick: UISegmentedControl! // need to use this
    @IBOutlet weak var operationPick: UISegmentedControl!
    
    public override func viewDidLoad() {
        super.viewDidLoad()

    }   
 }

和主要的:

    class MainScreen: UIViewController {
       
       @IBOutlet weak var displayText: UILabel!

       
       public override func viewDidLoad() {
           super.viewDidLoad()

       }
       
       
      // how it should work:

      func setLevel() {
           switch SettingsScreen().levelPick.selectedSegmentIndex {
           // easy
           case 0:
               displaytext.text = "test1"
           // medium
           case 1:
               displaytext.text = "test2"
           // hard
           case 2:
               displaytext.text = "test3"
           default:
               break
           }

       }

       @IBAction func Roll(_ sender: UIButton) {
           setLevel()
       } 
   }

标签: swiftxcodeuikituilabeluisegmentedcontrol

解决方案


由于您指的是SegmentedIndex基于某些设置更改指定的引用用户,因此您可以利用UserDefaults存储该索引以供以后检索。这会更简单,但这也取决于您实际追求的目标。

public class SettingsScreen: UIViewController {

@IBOutlet weak var levelPick: UISegmentedControl! // need to use this
@IBOutlet weak var operationPick: UISegmentedControl!

public override func viewDidLoad() {
    super.viewDidLoad()

}   


  @IBAction func levelPickPressed(_ sender: UISegmentedControl) {
    switch levelPick.selectedSegmentIndex {
      case 0:        // Easy
        defaults.set(0, forKey: "levelPick_Level")
        
      case 1:        // Med
        defaults.set(1, forKey: "levelPick_Level")
        
      case 2:       // Hard
        defaults.set(2, forKey: "levelPick_Level")

      default:
        break
      }
   }
}

然后在您的 MainScreen 代码中

  func setLevel() {
       levelPick = UserDefaults.standard.integer(forKey: "levelPick_Level")
       switch levelPick {
       // easy
       case 0:
           displaytext.text = "test1"
       // medium
       case 1:
           displaytext.text = "test2"
       // hard
       case 2:
           displaytext.text = "test3"
       default:
           break
       }
   }

推荐阅读