iOS 如何实现下拉列表以及如何关闭它?

2023-11-23

我需要一些关于如何在 iOS 中实现下拉列表类型功能的输入。

我想到了一些解决方案,例如使用UITableView用于显示文本项列表。 (在我的例子中,列表可以是静态的也可以是动态的,所以UITableView对于我的情况来说似乎是一个不错的选择)。但我无法弄清楚的一件事是如何关闭下拉菜单......

假设在视图中的某处打开了这个下拉列表(假设该视图占据了整个屏幕)。当我点击视图中的其他位置时,下拉菜单一旦打开,应该会被关闭(关闭),就像典型的下拉菜单在桌面环境中的工作方式一样。我怎么做?

一种方法是听touchesBegan视图上的事件并查看下拉列表是否打开 - 这很好,但问题是如果我有按钮之类的东西,并且当用户单击其中之一时,我不会收到touchesBegan在视图上输入。

我该如何以通用的方式解决这个问题?


在 iOS 中,下拉列表通常使用 UIPickerView 来实现。选择器视图可以设置为文本字段的输入视图,该视图将按住下拉菜单,然后以与键盘相同的方式在屏幕上和屏幕外进行动画处理。

您通常还需要一个 UIToolbar,其中包含一个“完成”按钮作为输入附件视图,它出现在选择器上方,并且允许您在做出选择后关闭(如果您没有自动执行此操作)。

您可以通过发送来删除选择器resignFirstResponder到文本字段,无论是从选择器视图委托方法还是完成按钮的操作方法。

您可以将工具栏创建为附件视图,如下所示:

accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
accessoryView.barStyle = UIBarStyleBlackTranslucent;

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTapped:)];

accessoryView.items = [NSArray arrayWithObjects:space,done, nil];

textField.inputAccessoryView = accessoryView;

这将在右侧为您提供一个“完成”按钮,该按钮连接到名为 didTapped 的操作方法:

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

iOS 如何实现下拉列表以及如何关闭它? 的相关文章

  • SiriKit 错误:此应用程序不支持捐赠意图

    我在 Xcode 10 iOS 12 Beta 中捐赠自定义意图时遇到问题 我创建了一个在我的主应用程序目标和 OrderIntent 目标之间共享的自定义框架 我创建了一个 intentdefinition 文件 并将目标成员资格设置为我
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • iOS 13 beta 外部屏幕上的 OverscanCompensation

    我正在测试一个应用程序的测试版 但遇到了外部屏幕的问题 我们看到应用程序周围有黑色边框 我们之前可以通过设置来纠正它overscanCompensation to none但在 iOS 13 中 该设置根本没有任何效果 我们曾经看到一个错误
  • 核心数据 NSFetchRequest 还获取实体的子对象

    我是 iOS 开发和 Core Data 的新手 我有一个父 NSManagedObject class Units interface Properties NSManagedObject property nonatomic retai
  • 在运行时获取 iPhone 应用程序的产品名称?

    如何才能实现这一目标 我想获取名称 以便可以在应用程序中显示它 当然 每次更改名称时不必在代码中更改它 Try this NSBundle bundle NSBundle mainBundle NSDictionary info bundl
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • 如何提高包含大量小图像的 UCollectionView 的性能?

    在我的 iOS 应用程序中我有UICollectionView显示大约 1200 个小 35x35 点 图像 图像存储在应用程序包中 我正确地重用了UICollectionViewCell但仍然存在性能问题 具体取决于我处理图像加载的方式
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 无法将“SDWebImageActivityIndi​​cator”类型的值分配给“ST_SDWebImageIndicator”类型?

    I have multiple flavours targets in my Xcode project I am also using SDWebImage in my app Everything was working fine un
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • 如何防止 RealmSwift 列表中出现重复项?

    如何防止向列表中添加重复项RealmSwift 我有我的User作为领域对象 但真正的数据源是服务器 只是使用领域在本地缓存用户 当我从服务器获取当前用户数据时 我想确保存储在领域中的用户拥有来自服务器的所有播放列表 以及它们的曲目列表等
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers

随机推荐

  • 我如何创建一个每次在 tkinter 中显示帧时运行的方法

    我有一个 GUI 应用程序 有几个窗口和按钮可以前进和后退 为此 我使用控制器并在每次窗口更改时将框架提升到顶部 这是我的控制器代码和典型框架 import Tkinter as tk python from tkFileDialog im
  • Django OperationalError:无法为连接创建新进程

    今天早上 在让 Django storages Boto 和 Django compressor 将静态文件放到 S3 上之后 我今天早上开始在生产环境中遇到此错误 尽管我不知道这是否相关 OperationalError could no
  • 如何持久存储目录中文件的值?

    我正在使用 C 在 VS2005 中开发 Windows 应用程序 在我的项目中 我生成 dll 并将它们存储在一个目录中 这些 dll 将被命名为 TestAssembly1 TestAssembly2 TestAssembly3 等 所
  • Node.js 连接 ftp 并下载文件

    你好 我下载了这个 npm 模块来连接到我的 ftp 节点FTPS 连接等级 var FTPS require ftps var ftps new FTPS host myhost username user password mypw p
  • Interlocked.CompareExchange 是否使用内存屏障?

    我正在阅读乔 达菲 Joe Duffy 的帖子读写易失性和时效性 我试图理解帖子中最后一个代码示例的一些内容 while Interlocked CompareExchange ref m state 1 0 0 m state 0 whi
  • 使用位置粘性删除不需要的空间

    我正在尝试使用position sticky在旋转的元素上 但我在顶部获得了额外的空间 此外 粘性元素必须停止的地方 在父元素的末尾 它会移到外面 请注意 我需要控制来选择粘性元素和左窗口侧之间放置的像素数 检查第二个屏幕截图以了解这两个问
  • Google 自定义搜索下一页

    我有以下代码 但我不知道如何打印下一页的链接 如何转到下一页 usr bin python2 4 coding utf 8 import pprint from apiclient discovery import build def ma
  • 如何将 BlueZ 配置为要求连接设备输入匹配的密钥?

    我正在尝试在嵌入式 Linux 设备上设置蓝牙 以便使用 SSP 模式 我的设备生成密码并在其显示屏上显示密码 并且要求远程端 例如用户的手机 输入匹配的密码才能使用才能成功配对 我编写 注册了一个代理 将其模式设置为 DisplayOnl
  • 为什么数组的 VarType() 总是返回 8204

    In the VarType MSDNMicrosoft VBScript 文档VarType它说的功能 粗体强调 备注 VarType 函数永远不会通过以下方式返回 Array 的值 本身 它总是添加到其他一些值来指示数组 特定类型 Va
  • 增量逻辑

    我试图更深入地了解后增量和预增量 但我有点坚持以下表达式 public static void main String args int i 0 i i i i 2 i i i 0 i i 2 i i i 0 1 3 2 1 i 0 6 1
  • 如何根据实时音频开发频谱分析仪?

    我正在开发一个应用程序 可以实时从麦克风获取源音频 无需文件存储 基本上 我使用 mRecorder new MediaRecorder mRecorder setAudioSource MediaRecorder AudioSource
  • 带有 SceneKit SCNProgram 的金属着色器

    我正在寻找一个可以在 SceneKit 和 SCNProgram 中工作的金属着色器 有人可以告诉我正确的方法声明 如何连接它吗 let program SCNProgram program vertexFunctionName myVer
  • 在 Android 上阻止网站

    有没有办法在 Android 设备上以编程方式阻止网站 我想要一个填充到持续运行的服务中的 URL 黑名单 当在受限条款下运行的用户打开浏览器时 它应该检查该黑名单 我想过修改hosts allow和hosts deny文件 但这些文件受到
  • 如何在 Node.js 上使用 Sequelize 进行连接查询

    我正在使用sequelize ORM 一切都很棒而且干净 但是当我使用它时遇到了问题join查询 我有两个模型 用户和帖子 var User db seq define User username type db Sequelize STR
  • 为什么不允许 auto 作为函数参数?

    From 这个问题 很清楚auto不能用作函数参数 我的问题是为什么返回类型被允许为auto但函数参数不是 auto function auto data DOES something Since there有很多好处auto进来c 1z
  • 使用 Next js 时在 CSS/SASS 模块中使用 kebab-case CSS 类名

    我在 React Next js 中使用 SCSS 模块作为我的组件 但我不知道如何导入 kebab case 类 目前 我只是用驼峰命名法编写所有 SCSS 类 但这并不理想 因为这意味着我无法使用 SCSS 级联 我还在学习 React
  • 超过 Google Directions API 上每个请求 23 个航点的限制(商务/工作级别)

    我想使用 Google Directions API 为一家处理冬季扫雪机和夏季景观美化的公司开发路线规划软件 客户的要求之一是他能够计算具有至少 30 个 最好更多 航点的路线 根据文档 下面引用 即使 Google Maps API f
  • DB2:从表中清除大量记录

    我使用 DB2 9 7 FP5 作为 LUW 我有一个包含 250 万行的表 我想删除大约 100 万行 并且此删除操作分布在整个表中 我正在用 5 个删除语句删除数据 delete from tablename where tableky
  • Figure.show、Figure.canvas.draw 和Figure.canvas.draw_idle 之间有什么区别

    在 Matplotlib 中 我可以通过调用来更新图中绘图的视觉效果Figure对象 说fig并调用该方法show fig show 但我也可以通过致电来做到这一点canvas图中的对象 然后调用方法draw fig canvas draw
  • iOS 如何实现下拉列表以及如何关闭它?

    我需要一些关于如何在 iOS 中实现下拉列表类型功能的输入 我想到了一些解决方案 例如使用UITableView用于显示文本项列表 在我的例子中 列表可以是静态的也可以是动态的 所以UITableView对于我的情况来说似乎是一个不错的选择