2017-06-30 9 views
0

UITableView内でDarkseal Downpickerを使用しようとしています。私はプログラム的のUITextFieldを追加し、次のようにDownpickerを追加してい:ダウンピッカーがUITableViewに表示されない

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 

var textField = UITextField() 
let cell = UITableViewCell(style: .default, reuseIdentifier: nil) 
cell.selectionStyle = .none 
textField.text = "TEST" 
textField.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(170), height: CGFloat(30)) 

var dp: DownPicker! 

let test1 = ["test one", "test two"] 

dp = DownPicker(textField: textField, withData: test1) 

cell.contentView.addSubview(dp) 

return cell 

} 

私はちょうどテキストフィールドを追加する場合:

cell.contentView.addSubview(textField) 

そして、それがテキストフィールドを表示します。上記のように、私はDownPickerを追加する場合は:

cell.contentView.addSubview(dp) 

私は何も表示、ちょうど空のテーブルビューを取得していません。 DownPickerが表示されない理由を理解するのに役立ちます。ありがとう。

答えて

1

には、ur UITextFieldとur DownPickerの両方を追加する必要があります。 UIPickerViewのようなものであればDownPickerUITextFieldを選択した場合にのみ表示されます。またcellではなく、DownPickerviewに追加する必要があります。

view.addSubView(dp) 

EDIT

は、 "それは(ストーリーボードに追加されたものを含む)あなたのコード内にすでに存在する任意のUITextFieldのを取ります" - https://github.com/Darkseal/DownPicker

EDIT 2

見てから、あなたがしたいことをドキュメントで行うには、cellForRowAtの中で以下を実行してDataPickerのオブザーバーとして自分自身を追加しますあなたはその中にcellForRowAtfunc

func dp_selected(sender: AnyObject) { 
    guard let dp = sender as? DropDown else { return } 
    if let textfield = dp.getTextField() as? UITextField { 
     guard let indexPath = tableView.indexPath(for: textfield.superview) else { return }   
    } 
} 

でこの機能をfuncクラスを追加したいfunc

dp.addTarget(self, action: #selector(dp_selected(sender:)), for: .valueChanged) 

送信者がタイプDropDownクラスであり、それがある場合UITextFieldを取得しようとするかどうかをチェックしますそれが接続されていれば返された場合、それはnilになる可能性がありますIndexPathを取得しようとしますが、セルが画面に表示されなくなった場合はうまくいけばそれが存在することを確認するためのチェックを追加しました。

+0

ハリー、ありがとうございました!両方(UITextFieldとDownPicker)をサブビューに追加する必要がありました。 –

+0

ハリー、何時でもダウンピッカーの変更イベントを迅速に処理する方法を知っていますか? UIControlEventValueChangedを使って上のリンクからそれを把握することはできません。 –

+0

すぐに私の答えを更新します。 –

関連する問題