从 UIButton 中获取 UIButton 的标签,该 UIButton 位于此 UIButton 呈现的弹出框中
Posted
技术标签:
【中文标题】从 UIButton 中获取 UIButton 的标签,该 UIButton 位于此 UIButton 呈现的弹出框中【英文标题】:Get a UIButton's tag from the UIButtons which are in the popover presented by this UIButton 【发布时间】:2015-08-05 05:09:40 【问题描述】:标题看起来很长,但我想做的很简单。
我有几个相同的按钮排成一排,并将它们的标签设置为 0...n。单击其中任何一个(例如第二个)会弹出一个弹出视图,其中有几个按钮代表不同的选项(A、B、C、D)。如果我们点击选项 B,我想要做的是把第二个按钮的标题变成 B。
问题是弹出视图不知道是哪个 Button 呈现出来的,因为所有的 popoverView 都是同一个 UIViewController 类的实例。所以我正在考虑通过将它们的标签设置为不同的值来区分n个按钮。但是,我不知道如何从这个 UIButton 呈现的弹出框内的按钮中获取 UIButton 的标签。
非常感谢!
【问题讨论】:
【参考方案1】:这就是我将如何快速解决这个问题的方法。我将在 popoverViewController 中声明一个委托并有一个方法,例如
protocol popOverViewControllerDelegate: class
func popOverViewController(controller: PopOverViewController,
didSelectItem buttonTitle: String)
然后我会在popOver中的UIButton中添加一个目标动作
button.addTarget(self, action: "selected:",forControlEvents:.TouchUpInside)
select 方法会将 sender 传递给它
func selected(sender:UIButton)
delegate?.popOverViewController(self, didSelectItem: sender.currentTitle)
//dismiss viewcontroller
记得声明
weak var delegate: popOverViewControllerDelegate!
现在有了调用 popOver 的视图控制器,这个委托的子类并实现它的方法。 Whenever a button in the popOver is selected, this method will be called and the currentTitle of the method will be passed.您现在可以使用它来设置调用 popOver 的按钮的 currentTitle。 如果您在最后一部分需要进一步帮助,请询问。
【讨论】:
这正是我现在的做法。问题是在我的呈现视图控制器中实现委托方法func popOverViewController(controller: PopOverViewController, didSelectItem buttonTitle: String)
时,我如何知道使用此buttonTitle
设置哪个按钮?我正在考虑传递sender.currentTitle
以及sender.superview.superview.tag
之类的东西,然后我会知道哪个按钮正在呈现这个弹出视图。但是,我是如何得到这个标签的。【参考方案2】:
我通过添加属性tagNumber
解决了这个问题,这样在实例化popoverViewController 的类之后,我将实例的tagNumber
设置为发送者的标签。然后我将tagNumber
和sender.currentTitle
一起发回。这样,popover 的展示者就可以知道 UIButton 的标题和标签号。
【讨论】:
以上是关于从 UIButton 中获取 UIButton 的标签,该 UIButton 位于此 UIButton 呈现的弹出框中的主要内容,如果未能解决你的问题,请参考以下文章
如何从 uibutton 中获取先前关于标签值的图像和标题?
如何从 UIScrollView 获取 UIButton 位置
如何从 UIButton 操作方法获取 UITableViewCell 对象?
从 UIButton 按下处理程序获取关联 UIView 的最简洁方法