覆盖方法语法iOS

3
我正在尝试在我的cellForRowAtIndexPath方法中覆盖一个方法,代码如下:
cell.customSwitch {
    - (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
    {
        [super touchesEnded:touches withEvent:event];
        NSLog(@"customSwitch touchesended");
    }

};

然而,这并不起作用(我通常是一个Java程序员:P)。非常感谢任何帮助!
1个回答

7

Objective-C和Java有很多相似之处,但这并不是其中之一。 ;-)

如果你想创建一个带有自定义-touchesEnded:withEvent:方法的单元格,你需要单独声明和定义该类。例如:

@interface MyCell : UITableViewCell
{
//...
}
@end

@implementation MyCell
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
    [super touchesEnded:touches withEvent:event];
    NSLog(@"customSwitch touchesended");
}
@end

一旦你完成了这个步骤,你就可以在-cellForRowAtIndexPath:中使用MyCell。

1
@mikez 为什么你需要在9个不同的地方覆盖触摸处理?这似乎是你试图用错误的解决方案来解决问题。 - Hollance
感谢您的帮助,但它不是UITableViewCell,而是CFCustomSwitch(UICustomSwitch)。由于我需要在整个应用程序中创建9个唯一的重写此方法的方式,所以我更喜欢找到另一种捕获此开关的触摸事件的方法。这是我的方法(pastebin.com/5Ybm7S0Z),但我需要基本上更改布尔值并每次选择此开关时保存它们。我实现了tag方法,我的意图是根据返回的标签更新布尔值。例如,如果(tag == 1){boolean_one =!boolean_one;}。我该怎么做?任何帮助都将不胜感激! - mikez
2
这样怎么样:您使用标准的目标-动作机制,其中开关在被点击时向您的视图控制器发送消息,控制器设置NSUserDefaults中的适当布尔值。如果您正在覆盖标准UI控件类中的方法,则无论您实际上在做什么,都可能是错误的。处理控件的标准机制是目标-动作,因此除非您有充分的理由不这样做,否则请使用它。 - Hollance
1
@mikez,我不熟悉UICustomSwitch,但如果它是一个控件,通常要做的事情就是设置适当的目标和操作。有了良好的MVC设计,您不需要为要设置的每个值单独创建一个控件--您只需将标准控件连接到控制器中的不同操作即可。如果您想要一个绘制方式不同或具有某些不同行为(例如具有3个位置而不是2个的开关),则子类化可能是适当的,但在这种情况下,听起来标准行为就是您所需要的。 - Caleb
1
@mikez,请阅读目标-动作机制以获取有关此主题的完整信息。简而言之,您应该向视图控制器添加一个IBAction方法来处理开关状态的更改。然后将开关的Value Changed事件连接到您刚在视图控制器中创建的操作--从Value Changed圆圈ctrl-drag一条线到您的视图控制器,然后选择您的操作。 - Caleb
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接