2015-06-23 2 views
0

Я определил переменную пользовательского класса ShowHideControl в viewDidLoad() и хочу вызвать метод в той же переменной при изменении значения шага. Я не уверен, как слушать изменение значения шага в пределах viewDidLoad.Следите за изменением значения шага и функцией вызова в viewDidLoad - Swift

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 
     } 
    } 
    } 

ответ

0

Вы можете сделать это с помощью делегата (я только представление, что должно быть изменено):

Сначала нужно создать делегат для ShowHideControl класса

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!") 
    } 
} 
+0

Спасибо, я прочитаю делегатов. Я не совсем понимаю концепцию – chuckieDub

+0

Это способ поднять событие из класса ShowHideControl и прослушать его с вашего ViewController – abinop

+0

Эта строка: 'self.delegate.StepperChanged (playerStepper.value)' в 'ShowHideControl.swift' является ошибка бросания: 'фатальная ошибка: неожиданно найденный nil при распаковке необязательного значения'. Кажется, что делегат вызывается перед загрузкой представления? – chuckieDub

Смежные вопросы