IBAction 的不同触摸状态
Posted
技术标签:
【中文标题】IBAction 的不同触摸状态【英文标题】:Different touch states for IBAction 【发布时间】:2014-09-04 12:43:35 【问题描述】:我记得很清楚,早期版本的 Xcode 提供了在几种不同状态下为 UI 元素连接 IBAction 的选项,例如当用户按下按钮但尚未抬起手指时等。我在 Xcode 中看到的所有内容6 只是一个在按下按钮时触发的 IBAction。
我需要几个按钮上的 IBAction,当用户触摸按钮时,即使没有抬起手指,它也会被调用。有什么方法可以实现吗?
【问题讨论】:
说真的,@SR Nayak,如果每个单个代码字都需要以特殊方式格式化,这是值得怀疑的。但是使用斜体肯定没有任何意义。如果您有格式化的冲动,请使用代码格式化。 【参考方案1】:您只需选择button
并从那里打开connection inspector
,您可以根据用户的操作连接多种方法。
或者简单地右键单击按钮并像这样从那里连接它
【讨论】:
啊哈,我现在明白问题所在了!使用 UIButton 会出现这些事件类型。但是对于工具栏或标签栏中的按钮,它们不会。有什么办法可以在工具栏和标签栏中的按钮上工作? @Avalon 如果你想要 UIBarButtonItem 的答案,我可以……但 UITabBarItem 我不能……告诉我。 是的,请告诉我它是如何为 UIBarButtonItem 完成的。无论如何,这是向前迈出的又一步。【参考方案2】:我认为您要查找的事件是 UIEventTouchDown
,无需动动手指。
这是UIControlEvents
上的 Apple 官方文档:
https://developer.apple.com/library/ios/documentation/uikit/reference/uicontrol_class/reference/reference.html#//apple_ref/c/tdef/UIControlEvents
【讨论】:
【参考方案3】:您可以使用该方法为不同的事件设置不同的IBAction:
addTarget:action:forControlEvents
事件列表: https://developer.apple.com/library/ios/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIControlEventsenter link description here
苹果文档: https://developer.apple.com/library/ios/documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/occ/instm/UIControl/addTarget:action:forControlEvents:
您也可以通过情节提要选择不同的事件
【讨论】:
【参考方案4】:根据您的要求,我正在给您写第二个答案
1) 创建一个UIView
子类让我们说MYView
类似这样。
#import "MYView.h"
@implementation MYView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
return self;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
@end
2) 像这样创建UIBarButtonItem
(同样的技巧可以应用于UIButton
,因为它直接继承自UIView
)
UIBarButtonItem *yourBBI = [[UIBarButtonItem alloc] initWithCustomView:[[MYView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]];
我们开始...如果您只是触摸(无需松开手指)该方法
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
将被解雇。
希望对你有帮助...
【讨论】:
感谢@Goppinath 的代码示例!但我想知道如果我只在情节提要中定义工具栏及其按钮,即非代码方式,这是否也能以某种方式应用?您使用自定义视图类初始化您的条形按钮项,该类具有触摸状态的处理程序。显然创建 UIAudibleBarButtonItem 的子类并添加例如touchesBegan 处理程序似乎没有削减它。我想知道为什么它在使用自定义视图类初始化时有效,但在扩展 UIAudibleBarButtonItem 类时无效?以上是关于IBAction 的不同触摸状态的主要内容,如果未能解决你的问题,请参考以下文章
在 UILabel 中处理触摸事件并将其连接到 IBAction
自定义 UIButton 触发 IBAction 一次,然后再也不触发