2016-12-27 17 views
0

だから、私はこれについて尋ねるのが愚かだと感じますが、何がうまくいかないのか分かりません。基本的には、UIPickerViewがinputViewであるtextFieldをクリックすると、非常に速く表示されて消えます。ただし、toolBar(そのaccessoryViewはまだ画面に残っています)。私はこれを経験した他の誰かを見たことがないので、私はそれを頼まなければならなかったのです。UIPickerViewが不規則に動作する

最初は、pickerViewの.isHiddenプロパティを設定していたときに何かがあったと思っていました。しかし、私はこれらの呼び出しを無効にしました。

このように、問題がどこにあるのかわからないので、私はpickerViewsに関連するコードをすべて含めます。私はそれが私が行方不明のマイナーなものだと確信していますが、どんな助けも高く評価されます。

class myAssessmentsViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate { 

@IBOutlet weak var contentSelectionTextField: UITextField! 
@IBOutlet weak var contentOrderingTextField: UITextField! 

var contentSelectionPickerView: UIPickerView = UIPickerView() 
var contentOrderingPickerView: UIPickerView = UIPickerView() 

var contentSelectionOptions: [String] = ["All", "Physics HL", "Chemistry HL", "Spanish Ab SL"] 
var contentOrderingOptions: [String] = ["Date", "Subject", "Grade", "Title"] 

required init?(coder aDecoder: NSCoder) { 

    super.init(coder: aDecoder) 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    contentSelectionPickerView.tag = 1 //for the delegate methods 
    contentSelectionPickerView.isHidden = true //commenting this out did nothing 
    contentSelectionPickerView.delegate = self 
    contentSelectionPickerView.dataSource = self 

    contentSelectionTextField.inputView = contentSelectionPickerView //set pickerView as responder 
    contentSelectionTextField.delegate = self 

    contentOrderingPickerView.tag = 2 //for the delegate methods 
    contentOrderingPickerView.isHidden = true //commenting this out also did nothing 
    contentOrderingPickerView.delegate = self 
    contentOrderingPickerView.dataSource = self 

    initializePickerViewToolBar(clearButtonFunc: "clearPressedContentSelectionPickerView", doneButtonFunc: "donePressedContentSelectionPickerView", textField: contentSelectionTextField) 
    initializePickerViewToolBar(clearButtonFunc: "clearPressedContentOrderingPickerView", doneButtonFunc: "donePressedContentOrderingPickerView", textField: contentOrderingTextField) 

    contentOrderingTextField.inputView = contentOrderingPickerView //set pickerView as responder 
    contentOrderingTextField.delegate = self 


    // Do any additional setup after loading the view. 
} 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 //same for both pickers 
} 

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

    if pickerView.tag == 1 { //contentSelectionPickerView 
     return contentSelectionOptions.count 
    } else if pickerView.tag == 2 { //contentOrderingPickerView 
     return contentOrderingOptions.count 
    } else { 
     return 1 
    } 

} 

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

    self.view.endEditing(true) 

    if pickerView.tag == 1 { //contentSelectionPickerView 
     return contentSelectionOptions[row] 
    } else if pickerView.tag == 2 { //contentOrderingPickerView 
     return contentOrderingOptions[row] 
    } else { 
     return "1" 
    } 

} 

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

    if pickerView.tag == 1 { 
     contentSelectionTextField.text = contentSelectionOptions[row] 
    } else if pickerView.tag == 2 { 
     contentOrderingTextField.text = contentOrderingOptions[row] 
    } 

} 

func textFieldDidBeginEditing(_ textField: UITextField) { 

    if textField == contentSelectionTextField { 
     contentSelectionPickerView.isHidden = false //also was not source of problem 
    } else if textField == contentOrderingTextField { 
     contentOrderingPickerView.isHidden = false //same here 
    } 

} 

func donePressedContentSelectionPickerView(){ 
    contentSelectionTextField.resignFirstResponder() 
} 
func donePressedContentOrderingPickerView(){ 
    contentOrderingTextField.resignFirstResponder() 
} 

func clearPressedContentSelectionPickerView(){ 
    contentSelectionTextField.resignFirstResponder() 
    contentSelectionTextField.text = "" 
} 
func clearPressedContentOrderingPickerView(){ 
    contentOrderingTextField.resignFirstResponder() 
    contentOrderingTextField.text = "" 
} 

func initializePickerViewToolBar(clearButtonFunc: String, doneButtonFunc: String, textField: UITextField){ 

    let toolBar = UIToolbar(frame: CGRect(x: 0, y: textField.frame.size.height/6, width: textField.frame.size.width, height: 40.0)) 
    toolBar.layer.position = CGPoint(x: textField.frame.size.width/2, y: textField.frame.size.height-20.0) 
    toolBar.barStyle = .default 
    toolBar.tintColor = UIColor.black 

    let clearButton = UIBarButtonItem(title: "Clear", style: .plain, target: self, action: Selector(clearButtonFunc)) 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: Selector(doneButtonFunc)) 
    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil) 

    toolBar.setItems([clearButton,flexSpace,doneButton], animated: true) 
    toolBar.isUserInteractionEnabled = true 

    textField.inputAccessoryView = toolBar 

} 

} 

また、私は視覚的に何を話しているのかの写真です。画面の下部に表示されるように、accessoryViewは引き続き表示されますが、コンテンツは表示されません。私はaccessoryViewはUIPickerViewのサブビューであり、一緒に消えるだろうと考えていますが、明らかにそうではありません。再び

The issue

、コード(と大きな画像)の全てについて謝罪が、私は通じ読むことがたくさんある知っているが、任意の洞察力をいただければ幸いです!

+0

あなたのtitleForRowにこの行は何ですか? self.view.endEditing(true) –

+1

@MikeTaverneうわーなぜ私はそれを見たときにそれ以上調べなかったのか分かりません。それは完全にそれでしたありがとう! –

+0

うれしかった! –

答えて

0

したがって、私が従っていたSOからの回答の1つは、私のpickerViewTitleForRowデリゲートメソッドにself.view.endEditing(true)を含めるように言われました。これは、タイトルが設定されているときはいつも、最初のレスポンダーが却下され、この問題が発生したことを意味していました。それを削除すると、問題が消えてしまいました。それを指摘するための@MikeTaverneに感謝します。

関連する問題