繁体   English   中英

如何将 UIButton 从我的自定义 UIControl 按下到我的视图 controller?

[英]How do I pass the UIButton pressed from my custom UIControl to my view controller?

我有一个带有 3 个UIButton的自定义UIControl

3 用户界面按钮

UIControl嵌入在视图 controller 内的UIView (黄色矩形)中:

界面视图

每个按钮都有不同的标签(tag1、tag2、tag3)。 我需要确定在 controller 视图中按下了哪个按钮。

我正在尝试在UIControl中使用sendActionsForControlEvents将其发送到视图 controller。

[self.button1 sendActionsForControlEvents:UIControlEventTouchUpInside];
[self.button2 sendActionsForControlEvents:UIControlEventTouchUpInside];
[self.button3 sendActionsForControlEvents:UIControlEventTouchUpInside];

在我看来,我不知道如何接收它 controller 以及如何识别按下了哪个按钮。

谁能帮我?

谢谢。

我解决了创建@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *tabsCollection; 在我的 UIControl 中。

然后在我的 ViewController 中创建一个循环来迭代这个 IBOutletCollection 并在每个按钮上添加一个动作来控制触摸事件。

    for (button in self.customTabsComponent.tabsCollection) {
        [button addTarget:self 
                   action:@selector(tabPressed:) 
         forControlEvents:UIControlEventTouchUpInside];
}

首先,明确职责。 如果您开发一个管理按钮集合的自定义控件,它应该负责接收这些按钮中的操作并通过其自己的接口将它们转发到视图 controller。

您的观点 controller 根本不应该负责管理这些按钮。

否则,如果管理按钮和代码的责任在您的视图 controller 内,那么您的自定义控件不是独立的,不是可重用的控件。 如果不将该代码复制粘贴到使按钮工作的视图 controller 中,您将无法将其与另一个视图 controller 一起使用。

现在,如果您的自定义控件是 UIControl 的子类,则您不能使用sendActionsForControlEvents来传递点击了哪个按钮的信息,因为该界面旨在具有一个操作,但针对不同的事件类型。 您需要的是不同的操作,或某种指示点击了哪些按钮的附加信息。

UIAlertController为例。 其中一种方法是实现一个动态的动作数组,它将在您的视图 controller 中创建,传递给您的自定义控件并由按钮调用。 您的按钮需要在您的自定义控件中动态分配。 更多的工作,但这将是最合适的方法。

如果您想拥有一组 static 按钮,您可以将块类型的属性添加到您的自定义控件。 不同的按钮会调用不同的块。

或者,您可以创建一个新的委托协议并传递按下按钮的索引,请参阅 UIAlertViewDelegate。 这是一个有点老派的方法,在块可用之前使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM