在 iOS 上,如何使“链接”或按钮的动态列表调用带有字符串参数的方法?

Posted

技术标签:

【中文标题】在 iOS 上,如何使“链接”或按钮的动态列表调用带有字符串参数的方法?【英文标题】:On iOS, how to make a dynamic list of "links" or buttons call a method with a string argument? 【发布时间】:2012-09-23 03:05:17 【问题描述】:

似乎在 ios 上使文本表现得像链接的一种常见方法是将其设为 UIButton,但我注意到 UIButton 的 addTarget 或 gestureRecognizer 的 addTarget 都没有可以传递的参数按下按钮时的方法?

情况是,我们可能会从服务器返回一个单词列表,例如“pineapple”、“apple”、“orange”,并且数字可能会有所不同。这些词显示在屏幕上,按下该词将调用 ViewController 来替换主视图控制器。

似乎一种方法是使用UIButton的标签,所以我们在设置按钮的时候,给它一个标签0,在当前视图或视图控制器的另一个数组中,让元素0指向一个NSString对象,包含单词“菠萝”。所以在处理程序中,可以获取标签,并且可以使用它来检索字符串。但这是唯一的方法,因为它似乎不是很结构化。有没有更好的办法?

【问题讨论】:

IMO,最简洁的方法是继承 UIButton 来存储您想要附加到按钮的数据。 那么如果UIKit没有UITextLink类,可以用这个方法创建这样的类吗? 但是你可以在action方法中获取按钮的currentTitle属性,这不就是你想做的吗? 1.子类化 UIButton 实际上 not 工作得很好; 2. 您可以使用关联引用或其他技术来创建您自己的NSString 属性,您可以将这些属性添加到UIButton 控件中; 3. 在模型结构中查找标签号和/或查找currentTitle 可能同样简单。 @rdelmar 没错,在这种情况下,它们实际上是匹配的。我没有考虑使用标签文本,因为它往往是演示部分......如果进行了一些更改,例如标签上写着“看看第一号水果”,那么它就会崩溃 【参考方案1】:

我下意识的回答是简单地建议您将UIButton 子类化。每当您想向现有类添加属性时,“子类”是您想到的第一个答案。但是当我尝试对UIButton 进行子类化时,它并没有很好地工作。搜索“UIButton 子类”时,我发现这是一个众所周知的问题,有几个推荐的解决方案:

Subclass UIButton to add a property objective C: Buttons created from subclass of UIButton class not working create uibutton subclass

我已经尝试过创建category with associative references 以及仅将UIView 子类化的简单方法,并将所需按钮设为其子视图。两种方法都可以正常工作。但是,仅将UIButton 子类化的直观有吸引力的选项效果很好。

但是,虽然向UIButton 对象添加属性的各种变通方法都有效,但它们似乎不够直观,我倾向于回到简单的东西,例如在数组中使用tag 数字或字典,而不是追求这些繁琐的按钮子类化技术。

【讨论】:

【参考方案2】:

创建一个可变字典。要将单词与按钮相关联,请将包含在 nsnumber 中的按钮地址添加为键,将单词添加为对象。当按下按钮并发送操作消息以及“发送者”时,您可以从字典中检索当前单词。

【讨论】:

以上是关于在 iOS 上,如何使“链接”或按钮的动态列表调用带有字符串参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS5 视图控制器中创建链接/按钮动态列表的最佳方法

IOS - 如何使默认的后退按钮调用展开segue

IOS - Firebase 动态链接打开应用但在状态栏上显示文本按钮

在 iOS 应用或游戏中提供 YouTube 视频链接(如何播放/使用)按钮

如何基于选择列表过滤交互式网格?

iOS:如何在静态图像上添加动态按钮?