我在viewDidLoad()
中定义了自定义类ShowHideControl
的变量,并且我想在步进器发生变化时调用同一变量的方法值(value)。我不确定如何监听 viewDidLoad
中的步进值变化。
ViewController.swift:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var player3EquityLbl: UILabel!
@IBAction func stepperChange() {
stepperLabel.text = playerStepper.value.description
}
@IBOutlet weak var player4EquityLbl: UILabel!
@IBOutlet weak var playerStepper: UIStepper!
@IBOutlet weak var stepperLabel: UILabel!
@IBOutlet weak var totalBillLabel: UILabel!
@IBOutlet weak var winnerTxt: UILabel!
@IBOutlet weak var player1txt: UITextField!
@IBOutlet weak var player2txt: UITextField!
@IBOutlet weak var player3txt: UITextField!
@IBOutlet weak var player4txt: UITextField!
@IBOutlet weak var player1EquityLbl: UILabel!
@IBOutlet weak var player2EquityLbl: UILabel!
@IBOutlet weak var player1EquityWord: UILabel!
@IBOutlet weak var player2EquityWord: UILabel!
@IBOutlet weak var player3EquityWord: UILabel!
@IBOutlet weak var player4EquityWord: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var playerTxtArray = [player1txt, player2txt, player3txt, player4txt]
var playerEquityLblArray = [player1EquityLbl, player2EquityLbl, player3EquityLbl, player4EquityLbl]
var playerEquityWordArray = [player1EquityWord,player2EquityWord,player3EquityWord,player4EquityWord]
// initialize text boxes with zero value
var playerBillVlaues = PlayerBillValues(PlayerTextFieldArray: playerTxtArray)
playerStepper.value = 2
var showHideControl = ShowHideControl(lblArray:playerEquityLblArray, lblArray2: playerEquityWordArray, txtArray: playerTxtArray, playerStepper: playerStepper)
showHideControl.showQuantity(2)
需要观察步进器的变化(我在这里调用了一个假函数来说明我需要做什么):
onStepperChange(showHideControl.showQuantity(playerStepper.value))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
ShowHideControl.swift:
import Foundation
import UIKit
class ShowHideControl {
var txtArray : [UITextField!] = []
var lblArray : [UILabel!] = []
var lblArray2 : [UILabel!] = []
var totalShowing : Int = 0
var playerStepper : UIStepper!
init (lblArray : [UILabel!], lblArray2 : [UILabel!], txtArray: [UITextField!], playerStepper : UIStepper!){
self.lblArray = lblArray
self.lblArray2 = lblArray2
self.txtArray = txtArray
self.playerStepper = playerStepper
showQuantity(2)
}
func showQuantity(let showNumber : Int){
//show the correct number of labels and texts
for var i = 0; i < showNumber-1; ++i {
lblArray[i].hidden = false
lblArray2[i].hidden = false
txtArray[i].hidden = false
}
//hide the others
for var i = showNumber; i < 4; ++i {
lblArray[i].hidden = true
txtArray[i].hidden = true
lblArray2[i].hidden = true
}
}
}
最佳答案
您可以使用委托(delegate)来完成此操作(我仅介绍需要更改的内容):
首先为 ShowHideControl
类创建委托(delegate)
protocol ShowHideControlDelegate{
func StepperChanged(stepper_value:Int)
}
class ShowHideControl {
var delegate:ShowHideControlDelegate!
init (lblArray : [UILabel!], lblArray2 : [UILabel!], txtArray: [UITextField!], playerStepper : UIStepper!){
self.delegate.StepperChanged(playerStepper.value)
}
}
然后,从 ViewController
类中捕获它:
class ViewController: UIViewController, ShowHideControlDelegate {
override func viewDidLoad() {
super.viewDidLoad()
var showHideControl = ShowHideControl(lblArray:playerEquityLblArray, lblArray2: playerEquityWordArray, txtArray: playerTxtArray, playerStepper: playerStepper)
showHideControl.delegate = self
}
func StepperChanged(stepper_value:Int){
println("hey, we got the changed value!")
}
}
关于swift - 观察 viewDidLoad 中的步进值变化并调用函数 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30993581/