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】:

我的猜测是前两个没有被调用,因为按钮没有任何targets 注册到selectors。第三个没有被调用有点令人惊讶。

话虽如此,你应该试试[self addTarget:self action:@selector(buttonTapped:) forControlEvents: UIControlEventsTouchUpInside]

【讨论】:

正在界面生成器上设置操作。令人惊讶的是,如果我在操作中添加断点,我会在线程上看到:[UIApplication sendAction:to:forEvent:],理论上这是我添加的第一个方法。【参考方案3】:

发生这种情况的唯一方法是,如果您没有在 UIButton 子类上调用 addTarget

【讨论】:

什么意思?该操作在界面生成器上设置。

以上是关于UIButton 子类不响应超级方法?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:UIButton touch up inside 不响应多次按下

UIButton 不响应触摸事件

UIbutton 不响应触摸事件

UIButton按钮点击无响应处理方法

视图控制器内的 UIButton 不响应任何操作

iPhone:覆盖 UIButton buttonWithType 以返回子类