首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3 UIPicker

Swift 3 UIPicker
EN

Code Review用户
提问于 2017-03-10 02:26:14
回答 1查看 2.9K关注 0票数 4

为了更好地学习Swift 3/ iOS,我做了一个小小的测试应用程序。我刚开始使用Swift 2,但是停止了,所以回到它,但是有这么多的iOS需要学习!

它似乎工作得很好,所以当用户按下“完成”按钮时,我将选择视图值插入到textfield中。我发现如果没有这样做,如果用户想要选择视图的第一个值,就不会像滚动到另一个值时那样插入。我留下了控制器的相关代码。

代码语言:javascript
复制
class ViewController: UITableViewController, UIPickerViewDataSource, UIPickerViewDelegate {
 let pickerData: [String] = ["1", "2", "3", "4"]
 var picker = UIPickerView()

 @IBOutlet weak var textField: UITextField!

 // set the pickerview for number of periods
func setPickerView(){
    picker.dataSource = self
    picker.delegate = self
    textField.inputView = picker
    textField.inputAccessoryView = initToolBar()
}

// build the toolbar for uipicker, so a user can select a value
func initToolBar() -> UIToolbar {
    let toolBar = UIToolbar()
    toolBar.barStyle = UIBarStyle.default
    toolBar.isTranslucent = true
    toolBar.tintColor = UIColor(red:14.0/255, green:122.0/255, blue:254.0/255, alpha: 1)
    toolBar.sizeToFit()
    // TODO need to update actions for all buttons
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: nil)
    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(pickerDoneAction))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
    toolBar.isUserInteractionEnabled = true

    return toolBar
}

// Take pickerview value and insert into textfield, this stops the first row on load not being loaded into textfield
func pickerDoneAction(sender: UITextField){
    let indexPath = picker.selectedRow(inComponent: 0)
    textField.text = pickerData[indexPath]
    // resign first responder dropping the uipicker
    UIApplication.shared.sendAction(#selector(resignFirstResponder), to:nil, from:nil, for:nil)
}

// Pickerview delegates
func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 }
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {return pickerData.count}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {return pickerData[row]}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    textField.text = pickerData[row]
}
 }

如果代码非常合适,并让它在同一个屏幕上具有不同数据源的多个uipickers上工作,我想使用这个方法。虽然我还不太确定

EN

回答 1

Code Review用户

发布于 2017-03-10 10:08:45

一个简单的修复方法是在数据源的开头添加一个空的额外值。

设pickerData:字符串 = “、”1“、”2“、”3“、”4“

或者,只要他们开始编辑let textField.text = pickerData[0],您就可以立即使用textField。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/157391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档