UIButton子类未响应超级方法



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

这些方法都不会被触发。有线索吗?

我可能找错了树(双关语部分是有意的),但我创建了一个Swift项目,它满足了我认为你的要求。我知道你在用ObjC,但为了节省时间,我用Swift做了它。无论如何,它会给你一个开始的地方。

这是GitHub上的回购:点击此处
-->注意:您需要>=Xcode 6来运行该项目。

项目中需要注意的几点:
1-确保将Main.storyboard上的Button连接到您创建的类。
2-在Swift中,class MyButton: UIButton是为类实现UIButton的行。我确信有一个ObjC等价物,这个堆栈溢出问题可能在语法上很有帮助:点击这里

希望这些能有所帮助!

祝你好运,
Kyle

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

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

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

最新更新