UIButton 子类不响应超级方法?
Posted
技术标签:
【中文标题】UIButton 子类不响应超级方法?【英文标题】:UIButton subclass not responding to super methods? 【发布时间】:2015-02-11 17:39:08 【问题描述】:我想创建一个 UIButton 来切换其图像。单击后,图像应更改为另一张图像并保持不变,直到再次单击为止。
我已将两个图像添加到界面生成器上按钮的默认状态和选定状态。
现在,我创建了一个 UIButton 子类。我的想法是拦截对该按钮的点击并更改按钮状态。所以我将它添加到 UIButton 子类中,希望这些方法之一可以通过点击来触发。
- (void)sendAction:(SEL)action
to:(id)target
forEvent:(UIEvent *)event
[super sendAction:action to:target forEvent:event];
// toggle state
[self setSelected:![self isSelected]];
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
[super sendActionsForControlEvents:controlEvents];
// toggle state
[self setSelected:![self isSelected]];
- (void)touchesEnded:(NSSet *)touches
withEvent:(UIEvent *)event
[super touchesEnded:touches withEvent:event];
// toggle state
[self setSelected:![self isSelected]];
这些方法都不会被触发。有什么线索吗?
【问题讨论】:
按钮是否连接到 IB 中的其中一个?它是否设置为身份检查器中的子类? 也许你应该尝试不同的方法,看看这个question 什么意思?该按钮已添加到界面生成器上,并通过拖动到正在使用的类在其中设置了一个操作。 【参考方案1】:我可能找错了树(部分是双关语),但我创建了一个 Swift 项目,它可以满足您的要求。我意识到您正在使用 ObjC,但由于我的时间缘故,我在 Swift 中制作了它。无论如何,它会给你一个开始的地方。
这里是 GitHub 上的 repo:Click Here --> 注意:您需要 >= Xcode 6 才能运行该项目。
项目中需要注意的几点:
1 - 确保将Main.storyboard
上的按钮连接到您创建的类。
2 - 在 Swift 中,class MyButton: UIButton
是为类实现 UIButton
的行。我确定有一个 ObjC 等价物,这个 Stack Overflow 问题在语法上可能会有所帮助:Click Here
希望这对您有所帮助!
祝你好运, 凯尔
【讨论】:
谢谢。我刚刚重新创建了所有内容,现在它正在工作。它一定是那些 Xcode 问题之一。【参考方案2】:我的猜测是前两个没有被调用,因为按钮没有任何target
s 注册到selector
s。第三个没有被调用有点令人惊讶。
话虽如此,你应该试试[self addTarget:self action:@selector(buttonTapped:) forControlEvents: UIControlEventsTouchUpInside]
。
【讨论】:
正在界面生成器上设置操作。令人惊讶的是,如果我在操作中添加断点,我会在线程上看到:[UIApplication sendAction:to:forEvent:]
,理论上这是我添加的第一个方法。【参考方案3】:
发生这种情况的唯一方法是,如果您没有在 UIButton 子类上调用 addTarget
。
【讨论】:
什么意思?该操作在界面生成器上设置。以上是关于UIButton 子类不响应超级方法?的主要内容,如果未能解决你的问题,请参考以下文章