UITEXTFIELD InputView Uipicker не работает в Swift
Привет я пытаюсь выскочить UIPickerView
смотреть программно, когда пользователь нажимает на текстовое поле. Я пробовал это, но ничего не делает. это не работает при нажатии на текстовое поле ничего не происходит
class UserProfileTableViewController: UITableViewController,UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource {
var itemPicker: UIPickerView! = UIPickerView()
@IBOutlet weak var genderTxtField: UITextField!
var gender = ["MALE","FEMALE"]
override func viewDidLoad() {
super.viewDidLoad()
genderTxtField.delegate = self
itemPicker!.delegate = self
itemPicker!.dataSource = self
itemPicker!.backgroundColor = UIColor.blackColor()
self.genderTxtField.inputView = itemPicker
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
return 1
}
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gender.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return gender[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
genderTxtField.text = gender[row]
//.hidden = true;
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
itemPicker.hidden = false
return false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
4 ответа
Решение
Проблема в вашем текущем коде заключается в следующем:
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
itemPicker.hidden = false
return false // <--- this is not letting the textField become editable
}
Я бы предложил полностью удалить этот метод.
Итак, я выкопал нечто подобное, я написал, он использует DatePicker, но общий код тот же.
var datePicker: UIDatePicker!
@IBOutlet var dateFrom: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.setUpDatePicker()
}
func setUpDatePicker() {
datePicker.datePickerMode = UIDatePickerMode.Date
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 0, height: 44))
let doneBtn = UIBarButtonItem(title: "Select", style: UIBarButtonItemStyle.Done, target: self, action: "selectDate")
let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
toolBar.setItems([space, doneBtn], animated: false)
YOURTEXTFIELD.inputAccessoryView = toolBar
YOURTEXTFIELD.inputView = datePicker
}
Затем вы добавляете функцию для обработки готового нажатия кнопки
func selectDate() {
let formatter = NSDateFormatter()
formatter.dateFormat = "dd-MM-yyyy";
YOURTEXTFIELD.text = formatter.stringFromDate(datePicker.date)
YOURTEXTFIELD.resignFirstResponder()
}
Просто замените YOURTEXTFIELD на вашу версию genTxtField и измените указатель даты на свой.
Не забудьте проверить, все ли связано
func textFieldShouldBeginEditing(textField: UITextField) -> Bool
{
itemPicker.hidden = false
return true
}
Вы просто должны изменить ложь на истину в func textFieldShouldBeginEditing
,
itemPicker!.backgroundColor = UIColor.blackColor()
изменить на
itemPicker!.backgroundColor = UIColor.whiteColor()
затем удалите
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
itemPicker.hidden = false
return false
}
удачи!