データソースを変更したため、picker.reloadAllComponents()
コールがあります。しかし、私はエラーThread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
を取得し、私は理由を知っているが、私はUIPickerView
を動作させたい。UIPickerView picker.reloadAllComponents()が迅速に機能しない4
私はUIPickerView
はそれを示すリストと、新しい基準に基づいて、UIに、リストのリフレッシュしたい:
pickerData = []
for node : [String:Any] in _choices{
let _nodename = node["name"] as? String ?? ""
let _filtername = filterField.text ?? ""
if ((_nodename.range(of: _filtername)) != nil){
pickerData.append(_nodename)
}
}
:私は、テキストボックスの上の変更でこれを行う
class ViewControllerDisplay: UIViewController, UIPickerViewDataSource{
//......
var pickerData: [String] = []
func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 }
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return pickerData.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return pickerData[row] //<-- Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
self.view.endEditing(true)
}
let pickerView = PREMUIPickerView(frame: CGRect(x: 0, y: 130, width: 250, height: 300))
pickerView.dataSource = self
pickerView.delegate = self
私は、単に今、この
for view in (filterField.superview?.subviews)! {
if let picker = view as? UIPickerView {
picker.reloadAllComponents()
}
}
を行います。 SHOULD UIPickerViewはデータソースをリセットし、フィルタリングされたリストに基づいてUIに再描画する必要があります。それはしません。 pickerData
リストは確かにフィルタリングされます。しかし、視覚的要素が故に変更されていない私はfunc pickerView
(Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
)にラインからfatal error: Index out of range
エラーを取得するので、私の質問は:
あなただけpicker.reloadAllComponents()
以上のものを使用してデータソースを更新し、実際にリフレッシュするためのiOSに伝えるにはどうすればよいです情報元?
これは書かれているように有用な答えではありません。それは今後の読者を助けるものではないので、質問全体を削除するほうが意味があります。 – rmaddy
よく 'UIPickerView'をフィルタリングできないと言っている投稿がたくさんありますが、できますし、その例もありません –