swift - 观察 viewDidLoad 中的步进值变化并调用函数 - Swift

标签 swift ibaction viewdidload

我在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/

相关文章:

swift - 实现可散列和重载运算符的协议(protocol)

Objective-C API : Can an NSNumber become an Int in Swift?

swift - 如何防止 UIButton 的图像颜色重置为默认值?

swift - 快速搜索栏的 IBAction

swift - 在模态 UIViewController 解除后 View 生命周期中更新 Controller 的位置

iOS - 动态高度、数据驱动、垂直滚动布局

ios - AirPrint:将 pdf 文件直接打印到打印机

objective-c - iOS 开发 - 如何从自定义 View Controller 类接收按钮事件?

ios - (Swift) 在 ViewDidLoad 中放置一个 NSNotificationCenter 观察器对我的项目不起作用……我应该把它放在哪里?

ios - UICollectionView 的 viewDidLoad 大小不正确