2016-04-24 80 views
-1

所以我用一個UIPickerView作爲一個的UITextField的第一個響應者。我設置爲顯示:的UITextField反應遲鈍打開UIPickerView

var myPickerView = UIPickerView() 
myTextField.inputView = myPickerView 

我是不是有這個問題,直到我添加了一個UITapGestureRecognizer(這將讓我點擊選擇器視圖之外開除吧)認爲,像這樣:

let dismissUnitPickerGesture = UITapGestureRecognizer(target: self, action: "hidePicker") 
dismissUnitPickerGesture.delegate = self 
dismissUnitPickerGesture.cancelsTouchesInView = false 

hidePicker FUNC:

@IBAction func hidePicker(){ 
    myTextField.resignFirstResponder() 

    //I don't think this code is relevant to the problem, but I included it just in case 
    if materialSelectedOption == "Aluminum Cans" { 
     amountTextField.placeholder = "Number of Cans" 
     unitCell.hidden = true 
    } 
} 

現在它佔用的的UITextField 5次點擊模擬器上打開選擇器視圖,這是令人沮喪的,顯然不利於一個AP頁。我很確定它與輕擊手勢有關,但我可能是錯的。

如果您還有其他任何問題,請讓我知道。

回答

0

添加UITapGestureRecognizer只是檢測一個水龍頭註冊pickerView外面躲這是一種錯誤的! 可以使用touchesBegan功能和呼叫self.view.endEditing(true)像這樣:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     self.view.endEditing(true) 
     //or use textField.endEditing(true) 
    } 
+0

對不起,我的無知,但可以幫助指出我將如何實現這一點?我以前沒有使用過任何類型的東西。 –

+0

將其粘貼到您的viewController中! –

+0

好吧,我想,和禁用UITapGestureRecognizer的東西,但現在並沒有消除,當我點擊它的外面,這是我需要 –

0

我建議你補充工具欄與「完成」和「清除」的項目,而不是姿態。 下面的代碼,你可以使用:

func textFieldDidBeginEditing(sender: UITextField) {{ 
     let toolBar = UIToolbar(frame: CGRectMake(0, self.myTextField.frame.size.height/6, self.myTextField.frame.size.width, 40.0)) 
     toolBar.layer.position = CGPoint(x: self.myTextField.frame.size.width/2, y: self.myTextField.frame.size.height-20.0) 
     toolBar.barStyle = UIBarStyle.BlackTranslucent  
     toolBar.tintColor = UIColor.whiteColor() 


     let defaultButton = UIBarButtonItem(title: "Clear", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(CustomTimePickerTextView.clearTime(_:))) 
     let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(CustomTimePickerTextView.donePressed(_:)))  
     let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil) 
     let textButton = UIBarButtonItem(title: self.placeholder, style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

     toolBar.setItems([defaultButton,flexSpace,textButton,flexSpace,doneButton], animated: true) 

     self.myTextField.inputAccessoryView = toolBar 
    } 

    func clearTime(sender:UIBarButtonItem) { 
     // 
    } 

    func donePressed(sender: UIBarButtonItem) { 
     self.myTextField.resignFirstResponder() 

    } 
+0

我喜歡這個想法,我試圖使用你的代碼,但它只是在我的選擇器視圖選項上面增加了額外的空間,並沒有顯示任何東西 –

+0

我通過將你的代碼放在我的'viewDidLoad'方法。我很抱歉,但我不認爲我會接受你的回答,因爲@Med Abida已經指示我瞭解下面這個想法,而且我不得不引用其他Stack Overflow問題來使其工作。對不起:/ –