我想创建一个切换其图像的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
我的猜测是,前两个按钮没有被调用,因为按钮没有任何target
s注册到selector
s。第三个没有被调用有点令人惊讶。
话虽如此,你应该试试[self addTarget:self action:@selector(buttonTapped:) forControlEvents: UIControlEventsTouchUpInside]
。
发生这种情况的唯一方法是如果您没有在UIButton子类上调用addTarget
。