2017-07-06 114 views
0

Swift 3 iOS 10:我想在UIAlertView中添加UIPickerView,這樣我就可以選擇item並將其值設置爲textField。我可以用UIView做到這一點,但我想以更好和自然的方式改善它。是否有可能做到這一點或任何出路?如何在uialertview中添加uipickerview swift 3

提前致謝!

這是我做了什麼,

PIX1:我的文本字段https://z-p3-scontent.fpnh5-1.fna.fbcdn.net/v/t1.0-9/19702221_1969127863363332_1282515913735651533_n.jpg?oh=ece774626e6691c531dc69b168104fcc&oe=59D72E14

PIX2:我警告:https://z-p3-scontent.fpnh5-1.fna.fbcdn.net/v/t1.0-9/19665630_1969127860029999_9139151345242136168_n.jpg?oh=d56be1efc3bd772ff68e7e45fa7ebfae&oe=5A0F290F

回答

1

雖然蘋果公司建議我們不這樣做,你可以的確可以將選取器視圖添加到您的警報視圖控制器。 UIAlertViewController除了普通的視圖控制器以外沒有任何魔術。所有你需要做的就是顯示標題文本和大量新行(即「選擇\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n」),以增加提醒高度,然後致電alertViewController.addSubview(datePicker)

但是,問題是爲什麼您需要編寫額外的代碼來操縱警報視圖控制器並處理要設置值的文本字段?這是另一種更容易維護和實施的方法。

首先創建您的選取器視圖並對其進行配置。

let picker = UIPickerView() 
picker.delegate = self 
picker.dateSource = self 
// configure 

然後爲每個文本字段,只需撥打這個

tf1.tag = 1 
tf2.tag = 2 
tf3.tag = 3 

tf1.delegate = self 
tf2.delegate = self 
tf3.delegate = self 

tf1.inputView = picker 
tf2.inputView = picker 
tf3.inputView = picker 

不在你的文本字段的委託方法,存儲該文本字段用戶點擊並重新加載選擇器視圖數據

var tfTag = 0 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    tfTag = textField.tag 
    picker.reloadAllComponents() 
} 

最後,在所有選擇器視圖數據源或委託方法中,從每個文本字段的唯一標籤編號加載不同的一組數據庫

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if tfTag == 0 { 
     if component == 0 { 
      return "1" 
     }else if component == 1 { 
      return "2" 
     }else if component == 2 { 
      return "3" 
     }else{ 
      return "4" 
     } 
    }else if tfTag == 1 { 
     //... 
    }else{ 
     //... 
    } 
} 
+0

謝謝你,這是我想要的。但我有這個問題。我無法使用uipickerview時,我有多個/許多文本域 –

+0

@EKChhuon更新 –

+0

非常感謝,我知道了 –

相關問題