2015-07-11 80 views
2

我正試圖讓UIDatePicker在用戶擊中UIButton時作爲鍵盤出現。我能夠使它與文本框一起工作,但我不喜歡光標的顯示方式,如果用戶有外部鍵盤,用戶可以輸入任何文本。這裏是我的代碼:如何在Swift中使用UIButton激活一個inputView?

@IBAction func dateFieldStart(sender: UITextField) { 
     var datePickerStartView : UIDatePicker = UIDatePicker() 
     datePickerStartView.datePickerMode = UIDatePickerMode.Time 
     sender.inputView = datePickerStartView // error when sender is UIButton 
} 

我試圖改變發送者的UIButton,但它給了就行了這個錯誤是上面標明:

Cannot assign to 'inputView' in 'sender' 

我試圖研究它並沒有其他人似乎遇到了問題。任何人都知道如何使用UIButton觸發UIDatePicker inputView,或者任何可能更好用戶無法輸入的東西?謝謝!

+0

UIButton沒有inputView屬性。你到底想做什麼? – rounak

+0

我想要一個按鈕來觸發一個彈出的UIDatePicker,這樣我就可以得到一個日期變量而不會混淆UI。 – Chase

+0

您可以爲選取器屏幕視圖創建視圖,並在需要時將其移動到屏幕上。 – Jason

回答

0

您可以爲選取器屏幕視圖創建視圖,並在需要時將其移至屏幕上。這裏是another的帖子。

3

我想做同樣的事情,我最終只是在按鈕上覆蓋了一個UITextField,並使用inputView來代替。

提示:將UITextField的tintColor設置爲UIColor.clearColor()來隱藏遊標。

0
let tempInput = UITextField(frame:CGRect.zero) 
tempInput.inputView = self.myPickerView  // Your picker 
self.view.addSubview(tempInput) 
tempInput.becomeFirstResponder() 

這是一個好主意,讓到tempInput一個參考,所以你可以清理關閉時

0

這是原來的問題經過多年的,但任何人誰可能會尋找解決方案,這一點,你可以子類UIButton併爲inputView屬性提供getter和setter。一定要在setter中調用becomeFirstResponder並覆蓋canBecomeFirstResponder。例如:

class MyButton: UIButton { 

    var myView = UIView() 
    var toolBarView = UIView() 

    override var inputView: UIView { 
     get { 
      return self.myView 
     } 

     set { 
      self.myView = newValue 
      self.becomeFirstResponder() 
     } 
    } 

    override var inputAccessoryView: UIView { 
     get { 
      return self.toolBarView 
     } 
     set { 
      self.toolBarView = newValue 
     } 
    } 

    override var canBecomeFirstResponder: Bool { 
     return true 
    } 

}