2017-02-22 70 views
0

我有一个UIPickerView,我分类,这很好。然而,我有一个方法,我需要调用UIPicker从它被查看的UIViewController中“重置”。但是,它永远不会燃烧。如何从另一个视图控制器调用​​?如何从另一个视图控制器调用UIPickerView子类中的方法?

import Foundation 
import UIKit 

class ScoreClockPicker: UIPickerView { 

    //PickerView 
    let timerMinutesArray = Array(00...20) 
    let timerSecondsArray = Array(00...59) 
    let periodArray = ["1st", "2nd", "3rd", "OT", "SO"] 

    //Picker return values 
    var numberOfRowsInComponentReturnValue = 0 
    var titleForRowReturnValue    = "" 
    var widthForComponentReturnValue  = "" 


    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 

     self.delegate = self 
     self.dataSource = self 

    } 

    func resetPicker() { 
     print("resetPicker") 

     self.selectRow(0, inComponent: 0, animated: true) 
     self.selectRow(0, inComponent: 1, animated: true) 
     self.selectRow(0, inComponent: 3, animated: true) 

    } 
} 

extension ScoreClockPicker: UIPickerViewDataSource { 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

     if component == 0 { 

      numberOfRowsInComponentReturnValue = periodArray.count 

     } else if component == 1 { 

      numberOfRowsInComponentReturnValue = timerMinutesArray.count 

     } else if component == 2 { 

      numberOfRowsInComponentReturnValue = 1 

     } else if component == 3 { 

      numberOfRowsInComponentReturnValue = timerSecondsArray.count 

     } 

     return numberOfRowsInComponentReturnValue 

    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 4 

    } 

    func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { 
     var componentWidth = 0 

     if component == 0 { 

      componentWidth = 140 

     } else if component == 1 { 

      componentWidth = 40 

     } else if component == 2 { 

      componentWidth = 30 

     } else if component == 3 { 

      componentWidth = 40 
     } 

     return CGFloat(componentWidth) 
    } 


} 

extension ScoreClockPicker: UIPickerViewDelegate { 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

     print("didSelectRow") 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

     if component == 0 { 

      titleForRowReturnValue = periodArray[row] 

     } else if component == 1 { 

      titleForRowReturnValue = String(describing: timerMinutesArray[row]) 

     } else if component == 2 { 

      titleForRowReturnValue = ":" 

     } else if component == 3 { 

      titleForRowReturnValue = String(format: "%02d",timerSecondsArray[row]) 
     } 

     return titleForRowReturnValue 

    } 

} 

编辑:

下不从的viewController调用ScoreClockPicker工作:

import UIKit 

class ScoreClockViewController: UIViewController { 

    @IBOutlet weak var resetButton: UIButton! 
    @IBOutlet weak var okButton: UIButton! 

    var picker: ScoreClockPicker? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     //Hide the Navigation Bar 
     self.navigationController?.setNavigationBarHidden(false, animated: true) 
    } 

    //@IBOutlet 
    @IBAction func reset(_ sender: Any) { 
     print("reset") 

     picker?.resetPicker() //Call the ScoreClockPicker 

//  picker?.selectRow(0, inComponent: 0, animated: true) 
//  picker?.selectRow(0, inComponent: 1, animated: true) 
//  picker?.selectRow(0, inComponent: 3, animated: true) 
    } 

    @IBAction func ok(_ sender: Any) { 
    } 


} 
+0

初始化picker添加要在其中创建ScoreClockPicker'的'对象的代码。意味着添加你的ViewController的代码。 –

+0

@NiravD,请参阅上面的编辑。我试过了,它不起作用。 –

+0

如果你已经初始化了这个'picker'对象,那么我们也会显示它的代码,并且复位是否是按钮操作? –

回答

1

从你的代码中没有初始化的picker对象,你要使用在按钮操作中。所以在使用之前只需简单地初始化picker即可。

如果您做的ScoreClockPicker出口则

@IBOutlet var picker: ScoreClockPicker! 

也可以在viewDidLoad

self.picker = ScoreClockPicker() 
+0

@PaulS。欢迎队友:) –