免责声明:我是Interface Builder的新手,所以我可能完全错误地使用它。
我创建了一个NavigationViewController
,将两个ViewControllers
附加到我的故事板上,然后将UIButton
添加(拖动)到第一个VC上。
然后我在UIButton
上创建了一个导航segue,它在两个VC之间导航。这可以按预期工作。
当事情崩溃时,当我尝试使用我创建的UIButton
的自定义子类时:segue永远不会被触发。
UIButton
属性检查器中,我将自定义类设置为我的自定义类名。UIButton
添加了几个用户定义的运行时属性。UIButton标题如下所示:
#import <UIKit/UIKit.h>
@interface RSButton : UIButton
@property (nonatomic) CGFloat touchAlpha;
@end
UIButton实现如下:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.adjustsImageWhenHighlighted = NO;
self.highlighted = YES;
[UIView transitionWithView:self
duration:0.04
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
if (self.touchAlpha && self.touchAlpha < 1.0)
{
self.alpha = self.touchAlpha;
}
} completion:nil];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
self.highlighted = NO;
[self resetToDefaultState];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
self.highlighted = NO;
[self resetToDefaultState];
}
- (void)resetToDefaultState
{
[UIView transitionWithView:self
duration:0.12
options:UIViewAnimationOptionAllowUserInteraction
animations:^{
if (self.alpha < 1)
{
self.alpha = 1.0;
}
} completion:nil];
}
有趣的是,我可以看到问题是什么:我已经覆盖了touchesBegan/touchesEnded
事件,现在segue的东西没有被触发。
我无法弄清楚如何以编程方式触发附加的segue操作?
performSegueWithIdentifier
无法在[self]
和[self performSelector:@selector(performSegueWithIdentifier:@"segueId" sender:self)];
建议我在解雇之前知道segueId是什么。答案 0 :(得分:2)
在您的方法中,请致电:
[super touchesBegan:touches withEvent:event]
所以:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event]
//Your code
}
或:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//Your code
[super touchesBegan:touches withEvent:event]
}
在touchEnded等中执行相同操作。
重要:强>
当您覆盖重要和标准方法时,请务必使用superclass
在super
上调用该方法。
它与您在子类上调用init时的操作相同:
- (id)init {
self = [super init];
if(self) {
//your code
}
return self;
}