UIPickerView 最佳实践?

2024-01-11

一个简短的问题:在注册过程中,我想要求用户从值列表中选择一个值。

使用视图控制器添加所有文本字段并为值添加选择器视图是正确的方法吗?由于选择器视图在文本字段区域之间需要如此多的空间,我想知道在这种情况下的最佳实践是什么?

到目前为止,这是我的代码:

class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{

@IBOutlet weak var gradeTextField: UITextField!
@IBOutlet weak var gradePicker: UIPickerView!

let gradePickerValues = ["5. Klasse", "6. Klasse", "7. Klasse"]

func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int{
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    return gradePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return gradePickerValues[row]
}
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
    gradeTextField.text = gradePickerValues[row]
    self.view.endEditing(true)
}

override func viewDidLoad() {
    super.viewDidLoad()

    statusMessageLabel.hidden = true

    gradePicker.dataSource = self
    gradePicker.delegate = self
    gradePicker.hidden = true

    gradeTextField.inputView = UIPickerView()
    gradeTextField.text = gradePickerValues[0]

}

选择器视图在开始时隐藏,仅当我选择文本字段时才出现,到目前为止这很好......但是选择器视图是空的......


这取决于控制器的外观。如果每个屏幕只有一个选择操作,那么最好将Table View在其上,所选行将是当前选择。

如果屏幕有多个字段,用户应该使用它,那么,在我看来,最好把label + button在其上方,当用户按下此按钮时button你只是表明Picker View从屏幕底部。当用户选择任意行时Picker View您更改标签文本,但不要隐藏选择器本身,应该通过按“完成”来完成button你放在上面。

希望这可以帮助。


Update:

你的问题是因为你忘记设置dataSource的财产UIPickerView

做就是了:gradePicker.dataSource = self in viewDidLoad()

并且不要忘记在这里实现协议:class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource


Update 2:

终于成功了。如果你添加UIPickerView在你的textFiled的inputView中,那么它不应该在IB中。因此,您可以将其从故事板(或 .xib,如果您使用它)中删除。

然后将代码更改为如下所示:

class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutlet weak var gradeTextField: UITextField!
    var gradePicker: UIPickerView!

    let gradePickerValues = ["5. Klasse", "6. Klasse", "7. Klasse"]

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return gradePickerValues.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        return gradePickerValues[row]
    }

    func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
        gradeTextField.text = gradePickerValues[row]
        self.view.endEditing(true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        gradePicker = UIPickerView()

        gradePicker.dataSource = self
        gradePicker.delegate = self

        gradeTextField.inputView = gradePicker
        gradeTextField.text = gradePickerValues[0]
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIPickerView 最佳实践? 的相关文章

随机推荐

  • 使用 LINQ to SQL 是否有助于防止 SQL 注入

    我正在建立一个公共站点 我首先想到的是 SQL 注入 我正在保存一些文本字段 并使用 linq 来更新 写入数据库 我使用 linq 安全吗 此示例正在创建用户帐户 Data MemberRegistrationDataContext co
  • 如何在 Android 中关闭/销毁 Firebase 引用?

    这是场景 创建了 firebase 引用 Firebase myRef new Firebase url In Main Activity 用户单击按钮导航到其他活动 调用主活动的 onPause 有没有办法销毁这个构造函数 此引用正在创建
  • Base64 编码图像 blob 未在 IE 中显示

    echo img src height 150 这在 firefox safari 和 chrome 中显示的图像效果很好 但在 Internet Explorer 中它显示了一个漂亮的红十字 我认为这是因为编码的原因 尝试更换data i
  • Nlog目标数据库在运行时设置连接信息

    使用 Nlog 和数据库目标 有没有办法在运行时设置连接信息 我记得我的一些同事也做过类似的事情 他找到了这样的答案 http nlog forum 1685105 n2 nabble com DDL for Database Table
  • 溢出:隐藏不适用于正方向的平移

    我最近遇到了一件奇怪的事情overflow hidden 我将它设置为一个元素 然后我想将其中的元素转换为translate 当它向负方向平移时 它将被隐藏 但如果我向正方向平移 它就不会被隐藏 在桌面浏览器中 它并没有真正显示出来 但您可
  • sp_executesql 与 'IN' 语句

    我试图使用 sp executesql 来防止 SQL 2005 中的 SQL 注入 我有一个像这样的简单查询 SELECT from table WHERE RegionCode in X101 B202 但是 当我使用 sp execu
  • 函数后面的const如何优化程序?

    我见过一些这样的方法 void SomeClass someMethod const 这个 const 声明有什么作用 它如何帮助优化程序 Edit 我看到这个问题的第一部分之前已经被问过 BUT 它仍然没有回答第二部分 这将如何优化程序
  • 可编辑文本字段的 UITableView 列表

    我知道这可能不符合 Apple 的 iPhone 人机界面指南 但我想摆脱一级推送视图并拥有可编辑文本字段的列表 此外 我希望当视图出现时键盘从一开始就出现在屏幕上 问题是 当我有超过三个这样的字段时 弹出键盘将覆盖下面的字段 用户无法向下
  • 如果 @Produces 注释缺失,球衣服务会返回什么?

    我开始学习开发安全的网络服务 正如我注意到的 大多数示例都使用以下注释 Consumes 定义输入参数的格式 Produces 定义输出参数的格式 但在实际代码中我看到的方法如下所示 POST Consumes MediaType APPL
  • Chrome扩展,在后台脚本中播放声音

    我想从 Chrome 扩展程序播放声音 但我读到内容脚本无法播放声音 所以我把这段代码放在我的后台脚本中 var audio new Audio alert ogg audio play 但还是没有声音 从 generated backgr
  • 将 ASP.NET 会员资格提供程序与现有用户数据库结合使用

    我目前正在 Net 中重写整个网站 当前网站是用foxpro编写的 并使用自定义逻辑 验证规则和Sql服务器表来存储和验证用户 我想使用会员提供程序 但我有一个主要问题 我不知道如何克服 新站点和旧站点都必须共享用户和凭据 用户必须能够在过
  • 没有匹配的构造函数来初始化“std::thread”

    我一直在研究一个相当简单的设施 并发for循环构造 它采用输入元素列表 输出向量和从输入元素计算输出元素的函数 我有这个片段无法编译 template
  • scikit-learn 中出现“ValueError:无法将字符串转换为浮点数”错误

    我正在运行以下脚本 import numpy as np import matplotlib pyplot as plt import pandas as pd from sklearn preprocessing import OneHo
  • 自动下载Gradle项目中的源

    在 Maven 项目中 有一个选项可以自动下载所有库的源代码 和 javadoc 对于 Gradle 项目 我没有找到任何选项 只需打开一个类并单击 在互联网中搜索 如果您有很多库 这会非常烦人 有没有办法自动附加来自互联网的源 maven
  • c++03:std::map 中内置类型的默认构造函数

    我一直以为下面的代码 std map
  • spring-boot:repackage 和 mvn package 之间的区别

    在阅读了 Spring 文档和网络上的其他一些文章后 我仍然很困惑 Spring Boot Maven 插件之间有什么区别spring boot 重新打包和一个常规的MVN包 我认为 mvn package 创建了一个包含所有依赖项的 ja
  • 使用 shell 脚本删除服务器中的文件

    对所有文件执行 wget 后如何删除服务器中的文件 我知道当您通过 ftp 连接到服务器时 删除命令可以工作 但我无法在运行 shell 脚本时使用该命令 以下是我的脚本 请告诉我其中有什么问题 bin bash filelist ls 2
  • 如何使用 mongoimport 导入 json 文件

    我正在尝试使用导入 json 文件mongoimport使用此命令行 mongoimport db posts collection rows file post history json 但它返回此错误 connected to loca
  • 在同一查询中使用 DISTINCT 和 TOP

    我想用DISTINCT and TOP在同一个查询中 我试过 SELECT DISTINCT TOP 10 FROM TableA 但我还有一个副本personID 所以我想这样做 SELECT DISTINCT personID TOP
  • UIPickerView 最佳实践?

    一个简短的问题 在注册过程中 我想要求用户从值列表中选择一个值 使用视图控制器添加所有文本字段并为值添加选择器视图是正确的方法吗 由于选择器视图在文本字段区域之间需要如此多的空间 我想知道在这种情况下的最佳实践是什么 到目前为止 这是我的代