2017-03-15 4 views
0

私はカスタム日付ピッカーを作成しようとしています。私はUIPickerViewをサブクラス化し、init(coder:)init(frame:)の両方でUIPickerViewDataSourceUIPickerViewDelegateを作りました:UIPickerViewのサブクラス化中にUIPickerViewDelegateメソッドが動作しない

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"

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のようにしたいので、カウントが異なります。 2月| 16 | 35 |紀元前。各セクションは異なる量のΔsを有する。例えば、最小の時代は2を有する。 –

+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

ありがとうございました!私は、対応するView ControllerのViewDidLoad()にpickerView.delegate = selfを追加しています。どのような面倒な:)

+0

D'oh!うまくいけばうれしいです。 – DonMag

関連する問題