UIAlertController 'UIAlertAction' 标签/用户数据或 Swift 中的任何内容

2023-12-19

在我的 iOS 操作表中,我显示了 JSON 字典中的名称:

[
  { "Name": "Doctor for Disease AAA",
    "Doctor_id": "21"
  },
  { "Name": "Doctor for Disease BBB",
    "Doctor_id": "22"
  },
  { "Name": "Doctor for Disease AAA",
    "Doctor_id": "25"
  }
]

因此,在按钮单击委托上,我可以获得按钮索引并可以获取相应的“Name”和“Doctor_id”。这工作正常。

但现在似乎“UIActionSheet”已被弃用,我必须使用“UIAlertController”。由于我有大量数据,我正在迭代数组值并调用alertcontroller处理程序(因此所有按钮单击都有一个函数)。但是我如何从 UIAlertController 获取按钮索引,以便我可以同时获取“Name”和“Doctor_id”。

请帮我。


你在这里有多种可能性。

您可以使用find得到UIAlertAction index

find让您找到数组中对象的索引。你可以用它来find的索引action(作为参数传递UIAlertAction的处理程序,即UIAlertAction本身)在alert.actions所有动作的数组。

let alert = UIAlertController(title: "Doctors", message: "Choose a doctor", preferredStyle: .ActionSheet)
let closure = { (action: UIAlertAction!) -> Void in
    let index = find(alert.actions as! [UIAlertAction], action)
    println("Index: \(index)")
}
alert.addAction(UIAlertAction(title: "Doc1", style: .Default, handler: closure))
alert.addAction(UIAlertAction(title: "Doc2", style: .Default, handler: closure))
alert.addAction(UIAlertAction(title: "Doc3", style: .Default, handler: closure))
alert.addAction(UIAlertAction(title: "Doc4", style: .Default, handler: closure))
alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel) { _ in
    println("User cancelled.")
})
self.presentViewController(alert, animated: true) {}

您可以创建一个闭包...返回一个闭包

创建一个带有您选择的参数的闭包(这里是Int)并返回一个捕获该参数的闭包,以便您可以使用它

 let alert = UIAlertController(title: "Doctors", message: "Choose a doctor", preferredStyle: .ActionSheet)
 let closure = { (index: Int) in
     { (action: UIAlertAction!) -> Void in
         println("Index: \(index)")
     }
 }
 alert.addAction(UIAlertAction(title: "Doc1", style: .Default, handler: closure(0)))
 alert.addAction(UIAlertAction(title: "Doc2", style: .Default, handler: closure(1)))
 alert.addAction(UIAlertAction(title: "Doc3", style: .Default, handler: closure(2)))
 alert.addAction(UIAlertAction(title: "Doc4", style: .Default, handler: closure(3)))
 alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel) { _ in
     println("User cancelled.")
 })
 self.presentViewController(alert, animated: true) {}

这样你就有了一个为你的函数生成闭包的函数(闭包)UIAlertAction处理程序,都具有相同的主体,只是它们捕获不同的对象(不同的对象)Int here).

该解决方案的真正优点在于您可以捕获任何内容。您甚至可以捕获一个假设Doctor代表您的医生的对象,或者直接是医生 ID 等!

使用循环

但通常你会使用添加你的动作for循环,那么为什么不利用这一点,再加上闭包以及它们捕获变量的事实,来制作一个很好的函数,直接告诉您所选医生的 ID?

func testMyAlert() {
    let doctors = [
        ["Name": "Doctor for Disease AAA", "Doctor_id": "21"],
        ["Name": "Doctor for Disease BBB", "Doctor_id": "22"],
        ["Name": "Doctor for Disease AAA", "Doctor_id": "25"]
    ]

    chooseDoctor(doctors) { selectedDocID in
        if let docID = selectedDocID {
            println("User selected doctor with ID \(docID)")
        } else {
            println("User cancelled, no doctor selected")
        }
    }
}

func chooseDoctor(doctors: Array<[String:String]>, completion: Int?->Void) {
    let alert = UIAlertController(title: "Doctors", message: "Choose a doctor", preferredStyle: .ActionSheet)
    for doc in doctors {
        let action = UIAlertAction(title: doc["Name"]!, style: UIAlertActionStyle.Default) { _ in
            // On selecting this action, get the doctor's ID, convert it to an Int, and return that.
            completion(doc["Doctor_id"]?.toInt())
        }
        alert.addAction(action)
    }
    alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { _ in completion(nil) } )
    self.presentViewController(alert, animated: true) {}

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

UIAlertController 'UIAlertAction' 标签/用户数据或 Swift 中的任何内容 的相关文章

  • SwiftUI 检测用户何时截取屏幕截图或屏幕录制

    On UIViewController我们可以轻松地将观察者添加到控制器 喜欢 class ViewController UIViewController override func viewDidLoad super viewDidLoa
  • iOS SecItemCopyMatching RSA 公钥格式?

    我正在尝试从已生成的密钥对 两个SecKeyRefs 以便通过线路发送 我所需要的只是一个简单的 modulus exponent 对 它应该正好占用 131 个字节 模数为 128 指数为 3 但是 当我获取关键信息时NSData对象 我
  • 与自定义键盘扩展进行通信,主机应用程序无法在设备中运行,但可以在模拟器中运行

    我正在使用自定义键盘扩展 这几乎完成了 但当我与扩展和我的主机应用程序通信数据时 我只是面临设备问题 该应用程序在设备中没有工作 但在模拟器中工作也是如此 我的代码如下 HostApp 视图控制器 void viewDidLoad defa
  • 从 iOS 设备向 Google App Engine 进行身份验证

    我正在开发一个 iPhone 应用程序 它使用 Google 应用程序引擎来托管后端 我需要通过 Google 进行身份验证 但我似乎无法找到从我的应用程序中执行此操作的方法 看来我要做一个UIWebView让用户登录到我从 Google
  • 在 UITableViewCell 内动态更改标签宽度

    我正在尝试建立一个自定义表格视图 正如您在图片中看到的 我在故事板一侧将标签的宽度默认设置为 160 磅 并在加载表格时动态更改宽度 我通过修改 cellForRowAtIndexPath 委托方法来实现此目的 因此 根据日期的长度 我设置
  • iPad Safari Web Inspector 在页面加载时崩溃

    我有一个用 WordPress 制作的以视频为中心的网站 当我们在 iPad 上测试网站时 我们将其连接到 Mac 笔记本电脑并打开 safari 开发人员工具来检查是否有任何错误等 我们的主页上一切正常 但当我们转到我们添加的任何视频帖子
  • Swift 1.2 可选外部变量?

    由于 Swift 无法访问编译变量 因此我创建了一个指向编译变量的 Objective C extern 变量 编译变量转换器 h extern NSString const NetworkApiBasicAuthUsername 编译变量
  • 在 iOS Safari 上滚动后锚点失去点击能力

    使用它来获取点击次数 nav li a click function event event preventDefault target this attr href replace goToByScroll target 这是滚动功能 f
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • iOS5 和 Facebook API

    我想将我的应用程序与 Facebook 集成并从 github 下载 Facebook ios sdk 但是 该 sdk 适用于 Xcode 4 0 代码库 我正在使用 Xcode 4 2 for iOS 5 beta 5 应用程序 是否有
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • 如何在 iOS 6 中强制 UIViewController 为纵向

    As the ShouldAutorotateToInterfaceOrientation在 iOS 6 中已弃用 我用它来强制特定视图仅肖像 在 iOS 6 中执行此操作的正确方法是什么 这仅适用于我的应用程序的一个区域 所有其他视图都可
  • 在后台继续下载

    我正在创建一个应用程序 其中我从服务器下载一些数据 在后台运行时 我希望连接继续运行 以便可以下载数据 我知道有方法应用程序委托 void applicationDidEnterBackground UIApplication applic
  • Swift 错误:发出 SIGABRT 信号如何解决

    我只是 Swift 编码的初学者 我的想法很简单 就是一个有两个按钮的应用程序 单击时 文本字段将更改其文本 在 Main StoryBoard 中 我添加一个文本字段和两个按钮 在 ViewController swift 文件中 我这样
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • AGVTool new-version 和 What-version 不对应

    当我做 agvtool new version all 99 它更新我的 Info plist 文件 但是 如果我这样做 agvtool what version or agvtool next version 我收到此错误 There d
  • 共享扩展程序未出现在能够在 iPhone 上共享照片的应用程序列表中

    我正在尝试创建一个共享应用程序扩展 并按照以下来源的教程进行操作 http www technetexperts com mobile share extension in ios application overview with exa
  • 使用自定义格式将字符串转换为 NSDate [重复]

    这个问题在这里已经有答案了 可能的重复 NSString 到 NSDate https stackoverflow com questions 1353081 nsstring to nsdate iPhone 如何将 yyyyMMddTh

随机推荐

  • 将 Pandas Dataframe 写入_csv StringIO 而不是文件

    此代码的目标是将现有的 CSV 文件从指定的 S3 存储桶读取到 Dataframe 中 过滤 Dataframe 中所需的列 然后写入filtered使用 StringIO 将数据帧转换为 CSV 对象 我可以将其上传到不同的 S3 存储
  • 在没有先验消息类型知识的情况下解析 HL7

    在 NHapi 中 如果我们不知道消息类型 MSH 9 是什么 我们如何解析消息 var parser new NHapi Base Parser PipeParser IMessage parsedMessage parser Parse
  • 编写 MSMQ 示例应用程序所需的最低限度

    我已经研究了一个多小时 找到了如何在 C 中使用 MSMQ 的优秀示例 甚至找到了一本关于消息队列的书的完整章节 但是为了快速测试 我需要的只是涵盖这个场景 甚至不需要以完美的方式 只是为了快速演示 应用程序A 将消息写入消息队列 应用程序
  • 限制 SQL Server 登录只能访问一个数据库

    我有一个SQL Server服务器上有大约 50 个数据库 我希望创造一个新的Login对于希望访问其数据库的客户 但我不想让他们访问其他人49 个数据库 我怎样才能做到这一点 我认为这是我们非常喜欢做的事情 Step 1 create a
  • npm命令问题

    我已经在我的系统上安装了 Node js Windows 7的 我已将环境路径变量设置为 C Users pUser AppData Roaming npm node modules npm users 文件夹中有一个 npmrc 文件 其
  • 在哪里可以找到 vuetify 中使用的图标列表? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您可以添加一个图标 例如
  • Powershell 和 schtask 以及具有空格的任务

    我正在使用schtask使用 PowerShell 命令 出现的问题是 当程序 脚本参数包含C Program Files 它认为路径只是C Program路径的其余部分是一个参数 我试图通过使用来逃避它 场前和场后 但没有什么区别 我怎样
  • 如何在折叠工具栏布局下添加 viewpager 和 tablayout

    我尝试了该问题的所有解决方案stackoverflow但我没有得到任何帮助 首先 我想实现这样或类似的布局 根据一些问题stackoverflow like this https stackoverflow com questions 36
  • 获取 'Context 是不可构造的。添加默认构造函数或提供 IDbContextFactory 的实现。”

    当我尝试使用代码优先迁移时出现此错误 我的上下文有一个带有连接名称的构造函数 public class VeraContext DbContext IDbContext public VeraContext string NameOrCon
  • 如何检测 JavaScript 中的内存限制?

    浏览器是否可以对 JavaScript 对象中存储的数据量施加任何类型的限制 如果是这样 有什么方法可以检测到该限制吗 默认情况下 Firefox 似乎不会 var data document ready function data for
  • bootstrap3中文本输入字段的宽度

    bootstrap3 是否具有增加文本输入字段宽度的本机功能 我知道在 bootstrap2 中我只是附加一个像 input lg 这样的类来修改输入的宽度 但是在 bootstrap3 中这似乎只是增加了高度 查看 列大小调整 小节her
  • 硬件定时器中断在哪里?

    这是异常和中断表 我理解为IDT 摘自 英特尔架构软件开发人员手册 使上下文切换成为可能的定时器中断在哪里 用于多任务处理 如果这是一个愚蠢的问题 请纠正我的理解 先感谢您 嗯 是的 如果我们谈论的是传统的 8254 PIT 定时器 它位于
  • 一对多关系 JPA/Hibernate 删除链接

    我的双向关系设置如下 class Child ManyToOne JoinTable name CHILDREN WITH PARENT joinColumns JoinColumn name CHILD ID inverseJoinCol
  • Asp.net Web API 2 和使用集成 Windows 和基于令牌的混合身份验证

    我有一个在 IIS 下运行的 asp net Web API 服务器 到目前为止 该服务器一直使用 Windows 身份验证 因为它只有在与其连接的同一域上运行的其他服务 所以 在我的 web config 中我有以下设置
  • 如何创建方法引用列表?

    我需要处理一个列表 并为每个项目调用目标对象上的不同方法 我可以创建一个方法引用列表来执行此操作 这看起来很优雅 因此对于列表中的每个索引 我可以调用与其相对应的适当方法引用 private final static List
  • Django 模型字段索引

    我只知道索引很有用 而且查询速度更快 下面两个有什么区别 1 class Meta indexes models Index fields last name first name models Index fields date of b
  • 架构迁移工具如何工作?

    我有基于数据库的应用程序 每当架构发生任何更改时 我都会删除架构和数据库内容 现在它处于开发模式 很快我们就在生产环境中发布了该应用程序 但我们怀疑在生产使用中发布该应用程序后可能会发生许多变化 该软件将安装在全球许多地方 不是基于网络的应
  • 向后台进程发送信号

    我应该向后台进程发送哪个信号以将其移至前台 SIGTTIN SIGTOU 还是 它不是直接控制作业是前台还是后台的信号 这些作业 通常 处于 shell 的控制之下 例如 在bash 如果执行 pax gt sleep 3600 pax g
  • Kubernetes Horizo​​ntal Pod Autoscaler 中的 Pod 副本缩减是如何工作的?

    我的理解是 在 Kubernetes 中 使用 Horizo ntal Pod Autoscaler 时 如果targetCPUUtilizationPercentage字段设置为 50 并且所有 Pod 副本的平均 CPU 利用率高于该值
  • UIAlertController 'UIAlertAction' 标签/用户数据或 Swift 中的任何内容

    在我的 iOS 操作表中 我显示了 JSON 字典中的名称 Name Doctor for Disease AAA Doctor id 21 Name Doctor for Disease BBB Doctor id 22 Name Doc