在 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 子类”时,我发现这是一个众所周知的问题,有几个推荐的解决方案:
我已经尝试过创建category with associative references 以及仅将UIView
子类化的简单方法,并将所需按钮设为其子视图。两种方法都可以正常工作。但是,仅将UIButton
子类化的直观有吸引力的选项不效果很好。
但是,虽然向UIButton
对象添加属性的各种变通方法都有效,但它们似乎不够直观,我倾向于回到简单的东西,例如在数组中使用tag
数字或字典,而不是追求这些繁琐的按钮子类化技术。
【讨论】:
【参考方案2】:创建一个可变字典。要将单词与按钮相关联,请将包含在 nsnumber 中的按钮地址添加为键,将单词添加为对象。当按下按钮并发送操作消息以及“发送者”时,您可以从字典中检索当前单词。
【讨论】:
以上是关于在 iOS 上,如何使“链接”或按钮的动态列表调用带有字符串参数的方法?的主要内容,如果未能解决你的问题,请参考以下文章
IOS - Firebase 动态链接打开应用但在状态栏上显示文本按钮