将 UIActionSheet 选项连接到操作的正确方法

2024-01-04

在 iPhone 应用程序中使用 UIActionSheet 时,将操作与按钮匹配的典型方法似乎非常脆弱且美观不愉快。也许是因为我的 C/C++ 背景(更多 Perl、Java、Lisp 等)。按钮索引的匹配看起来像是太多的神奇数字,而且太脱节,无法避免简单的逻辑或一致性错误。

例如,

UIActionSheet *sources = [[UIActionSheet alloc]
         initWithTitle:@"Social Networks"
              delegate:self 
     cancelButtonTitle:@"Cancel" 
destructiveButtonTitle:nil 
     otherButtonTitles:@"Twitter", @"Facebook", @"Myspace", @"LinkedIn", @"BlahBlah", nil
];

<snip>

-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (buttonIndex == [actionSheet cancelButtonIndex]) {
        // all done
    } else if (buttonIndex == 0) {
        // Twitter
    } else if (buttonIndex == 1) {
        // Facebook
    } else if (buttonIndex == 2) {
        // LinkedIn
    } else if (buttonIndex == 3) {
        // Myspace
    }
}

请注意,操作处理代码中至少有两个错误(至少根据注释)。

我缺少的是避免 Objective-C 中这种脱节的正确设计模式。如果这是 Perl,我将首先构建一个按钮选项数组,然后可能创建一个快速查找表哈希,该哈希将对应于为每个项目执行适当操作的另一个对象或子例程查找表。在java中,原始列表可能首先是带有回调的对象。我知道我可以构建一个字典来模仿 perl 哈希,但这对于 3-4 个选项来说感觉非常笨拙和麻烦。我还考虑过使用枚举来掩盖索引的魔力,但这只是问题的一小部分。

真正的问题似乎是没有(简单?)方法可以在一个地方指定按钮字符串列表和相应的操作,从而消除在添加/删除/重新排序选项时在两个地方修改代码的需要,从而使其有效不可能犯我的示例代码所犯的那种错误。

我并不是想发起一场编程语言圣战,我只是想弄清楚在这种情况下(我相信 Objective C 中的许多其他模式)将按钮字符串列表连接到操作列表的正确设计模式是什么。


我更喜欢这种方式

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (buttonIndex == [actionSheet cancelButtonIndex]) 
    {
       // cancelled, nothing happen
       return;
    }

    // obtain a human-readable option string
    NSString *option = [actionSheet buttonTitleAtIndex:buttonIndex];
    if ([option isEqualToString:@"Twitter"])
    {
        //...
    } else if ([option isEqualToString:@"FaceBook"])
    {
        //...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UIActionSheet 选项连接到操作的正确方法 的相关文章

  • 如何以编程方式设置设备(UI)方向?

    希望屏幕 UI 上的所有内容都能够从横向左向右旋转 反之亦然 我该怎么做呢 这是私人的吗 我知道 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation inte
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • 如果您使用 CocoaPods,您的 .gitignore 中会包含什么内容?

    我从事 iOS 开发已经几个月了 刚刚了解到有前途的可可豆荚 http cocoapods org 用于依赖管理的库 我在个人项目上尝试过 添加了依赖项Kiwi https github com allending Kiwi到我的 Podf
  • 无法从 iOS 中的框架访问 .nib(XIB) 文件

    我已经从现有的代码库中创建了一个框架 并尝试在新的代码库中使用它 这很好用 但是当我尝试访问属于我的框架包的一部分的 nib 文件时 我的应用程序崩溃了 这是我用来访问视图控制器 XIB 文件的代码 testViewController c
  • 为什么在 init 方法中使用双括号,或者是 1 == (1)?

    评估某些含义时括号有什么作用 我在代码中遇到过这个问题 当检查某些内容并且他们使用 if some condition that returns 1 code 所以我的问题是 这是否正确 我认为它总是错误的 因为 1 不返回任何东西 编辑
  • NSUInteger 的奇怪行为 - 无法正确转换为浮动

    这是我的情况 这让我发疯 我有一个计数值为 517 的 NSMutableArray 我有一个双精度值 它是我的乘数 double multiplier 0 1223 double result myArray count multipli
  • 生成具有固定数字长度的随机数?

    我正在生成随机数 int randomID arc4random 3000 但我想生成至少 4 位数字的随机数 如 1000 2400 1122 我想知道 Objective C 的代码 请尝试 生成数字 1000 9999 int ran
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 将 NSData 转换回音频文件

    我已经转换了我的 caf音频文件到NSData使用以下代码行对象 NSData audioData NSData dataWithContentsOfFile MyRecorderFilePathURL path options 0 err
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • 如何在 UIScrollView 中启用缩放

    如何启用缩放功能UIScrollView 答案是here https developer apple com documentation uikit uiscrollview 滚动视图还可以处理内容的缩放和平移 当用户做出捏合或张开手势时
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 如何为 UIImageView 随机化器实现滑动手势

    我一直在浏览大量的教程和问题 但似乎找不到我要找的东西 我有一种感觉 我只是错过了一个简单的步骤 我仍在学习诀窍 所以请承受和我一起做这个 我正在 xcode 4 3 3 上制作图像随机化器 并且我已经能够使用按钮来随机化图像 但我希望它能
  • ios - 如何声明静态变量? [复制]

    这个问题在这里已经有答案了 C 中声明的静态变量如下 private const string Host http 80dfgf7c22634nbbfb82339d46 cloudapp net private const string S

随机推荐

  • 易失性是否足以更改对列表的引用?

    假设我们有一个列表引用 volatile List a 现在线程 1 初始化它 List newA new LinkedList lt gt newA add new String a Write to a volatile a newA
  • 使用 cookie 的 ASP.NET Web api“记住我”功能

    我正在尝试实施一个 记住账号 我的功能Web Api项目 我想 有记住账号当用户使用时的功能Sign In save a cookies用于保持用户始终登录 以便用户无需键入username and password他们每次访问网站时 通过
  • 私有属性的命名约定

    我见过下划线用作私有属性的前缀 private var aPrivateVar String I am private 我见过它们没有被使用过 private var aPrivateVar String I am private 从语法上
  • 如何使用C-API在Lua 5.1中创建表中表?

    我需要在 Lua 中创建这样的结构5 1C API 不在 Lua 5 2 及以上版本中 a b c d e GOOD print a b c d e 预期结果 良好 感谢您的解答 Lua C API 是基于堆栈的 这意味着大多数 C API
  • 如何以编程方式创建全屏TableLayout(表格高度意外折叠)

    下列TableLayout完全符合我的要求 它填充其父级并且列均匀拉伸
  • 如何在 github 存储库中执行状态检查

    我有一个 GitHub 存储库 在其中我使用以下新功能保护一个分支受保护的分支 https github com blog 2051 protected branches and required status checks 现在我的问题是
  • Bash 中“${!x}”间接扩展的安全注意事项

    假设我有一个变量 说x 包含未知的任意数据 以下间接扩展是否存在代码注入或其他形式的漏洞利用的风险 ARBITRARY COMMAND x 我知道有些情况下x分配给有用的现实生活场景本身可能会带来风险 需要适当控制或清理 但我在这里假设x已
  • 在 Woocommerce 订单和电子邮件中显示产品变体的自定义字段

    我成功地在 WooCommerce 后端添加了产品变体的自定义字段 并能够显示其值 我也想在订单和电子邮件中包含此值 Display Fields in admin on product edit screen add action woo
  • Flash AS3 中的文本链接

    因此 我自己为一些通过 Dropbox 工作的朋友制作了一个 wiki 式的应用程序 这意味着所有文件都存储在本地并由每个人更新 每个文件都是由 Flash 拉入的 txt 文件 然后使用简单的导航和搜索工具显示 现在我正尝试更进一步并链接
  • 在 Rmarkdown 中的每个部分中创建引用

    我想使用 Rmarkdown 但我读到的是 当使用 pandoc 创建参考书目时 引用位于文档末尾 pandoc citeproc 问题 多个参考书目 nocite citeonly https groups google com foru
  • 在 .NET 中处理和返回值

    考虑以下 TextReader reader new StreamReader file XmlSerializer xmlSerializer new XmlSerializer typeof T return T xmlSerializ
  • 更改自定义属性值

    我有一些代码 其中添加了我想要更改其值的自定义属性 div div 这是我正在尝试的 somebutton click function myCustomElement val SomeNewValue 但一切都没有改变 我怎样才能让它发挥
  • 从 Metafor 中的混合效应多级模型获取 R 平方

    我正在 R 中对森林的特定处理进行荟萃分析 对于这个模型 我需要拟合随机效应来解释研究方法的差异和地点年龄的变化之间的差异 因为这两个都是混杂变量 而且我对调查由它们引起的变化并不明确感兴趣 然而 据我所知 包裹 metfor 当您拥有多级
  • Git - 查找索引中单个文件的 SHA1

    我已将一个文件添加到 索引 git add myfile java 如何找到该文件的 SHA1 这是一个老问题 但有一件事需要澄清 这个问题和下面的答案讨论Git 哈希值一个文件的不完全一样 该文件的 SHA1 正如问题中所问 简而言之 如
  • Flex - 访问另一个 mxml 页面上的静态变量时出现问题

    首先 mxml 包含 Datefield 控件如下
  • Java字符串replaceAll()

    我一直想知道是否例如 JTextPane chatTextArea new JTextPane s replaceAll emoticon public String emoticon chatTextArea insertIcon new
  • Angular:ng-bind-html 过滤掉 ng-click?

    我有一些从 json 文件加载的 html 数据 我通过在我的应用程序中使用 ngSanitize 并使用 ng bind html 显示此 html 数据 现在我想将 json blob 中的任何链接从标准转换为 a href some
  • MySQL 列名称标准/约定 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在寻找包含 MySQL 列名称标准或约定的文档 建议 有人可以建议吗 据我所知 这个领域没有什么 标准 与 Sun 的旧 Java 约定不同
  • 在泛型中接受自身作为类型参数有什么用

    我在一个不相关的问题上看到了一些代码 但这让我很好奇 因为我从未见过 Java 泛型的这种构造 创建一个可以将其本身或其后代作为类型参数的泛型类有什么用处 这是示例 abstract class A
  • 将 UIActionSheet 选项连接到操作的正确方法

    在 iPhone 应用程序中使用 UIActionSheet 时 将操作与按钮匹配的典型方法似乎非常脆弱且美观不愉快 也许是因为我的 C C 背景 更多 Perl Java Lisp 等 按钮索引的匹配看起来像是太多的神奇数字 而且太脱节