2017-03-15 47 views
0

我正在嘗試製作自定義日期選擇器。我子類UIPickerView和兩個init(coder:)init(frame:)使其UIPickerViewDataSourceUIPickerViewDelegateUIPickerViewDelegate方法不會在執行子類化時執行UIPickerView

class XKPickerView: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate { 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    self.dataSource = self 
    self.delegate = self 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 
    self.dataSource = self 
    self.delegate = self 
} 

(...) 
} 

但委託功能pickerView(titleForRow:)未在該視圖負載調用。我想,我在init()中錯過了一些東西,但是什麼?

添加:我正在使用故事板構建視圖。

添加2:pickerView代碼有很多假人呢,但一般不採取行動,甚至簡單return "abc",因爲函數本身並沒有被調用(雙用print()和調試器檢查)。

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, 
       forComponent component: Int) -> String? { 
    switch component { 
    case 0: // day label 
     return String(row + 1) 
    case 1: // month label (localized) 
     return "0" 
    case 2: // century label 
     return "0" 
    case 3: // year of the century label 
     return String(row + 1) 
    case 4: // era label (localized) 
     return "0" 
    default: 
     return nil 
    } 
} 
+0

你確定你設置了行數嗎?如果它爲零,則不會調用該方法。 –

+0

是的,我做了,計數是不同的,因爲我希望選擇器像21 |二月| 16 | 35 |公元前。每個部分都有不同數量的s,例如最少代表時代有兩個。 –

+0

顯示你的'pickerView(titleForRow:)'代碼?或者至少是這個定義? – DonMag

回答

1

不知道發生了什麼事情與你的嘗試,但我只是做了這一點,它的工作沒有問題...

class MyPickerView: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.dataSource = self 
     self.delegate = self 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
     self.dataSource = self 
     self.delegate = self 
    } 

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

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

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return "Row \(row)" 
    } 

} 

這是整個班級。

+0

我複製並粘貼了你的答案,但它也沒有工作,但給了我一個解決方案,什麼是錯的!謝謝! –

1

謝謝大家的回答!我錯過了,我在相應的視圖控制器的ViewDidLoad()中添加了pickerView.delegate = self。真是恥辱:)

+0

D'oh!很高興你能解決問題。 – DonMag