UIButton 子类不响应超级方法?

UIButton subclass not responding to super methods?

我想创建一个可以切换其图像的 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]];
}

None 这些方法被触发。有什么线索吗?

我的猜测是前两个未被调用,因为该按钮没有任何 target 注册到 selector。第三个没有被调用有点意外。

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

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

我可能找错了树(部分是双关语),但我创建了一个 Swift 项目来完成我认为您所要求的。我知道您使用的是 ObjC,但为了节省时间,我在 Swift 中做了它。无论如何,它会给你一个起点。

这是 GitHub 上的回购:Click Here
--> 注意:你需要 >= Xcode 6 到 运行 项目。

项目中需要注意的几点:
1 - 确保将 Main.storyboard 上的按钮连接到您创建的 class。
2 - 在 Swift 中,class MyButton: UIButton 是为 class 实现 UIButton 的行。我确定有一个 ObjC 等价物,这个 Stack Overflow 问题在语法上可能会有帮助:Click Here

希望其中的一些内容对您有所帮助!

祝你好运,
凯尔