从 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 设置为发送者的标签。然后我将tagNumbersender.currentTitle 一起发回。这样,popover 的展示者就可以知道 UIButton 的标题和标签号。

【讨论】:

以上是关于从 UIButton 中获取 UIButton 的标签,该 UIButton 位于此 UIButton 呈现的弹出框中的主要内容,如果未能解决你的问题,请参考以下文章

如何从 uibutton 中获取先前关于标签值的图像和标题?

如何从 UIScrollView 获取 UIButton 位置

如何从 UIButton 操作方法获取 UITableViewCell 对象?

从 UIButton 按下处理程序获取关联 UIView 的最简洁方法

awakeFromNib 无法从 UILabel 获取值,也无法禁用 UIButton

获取 UIButton 按下的内容