子类覆盖方法未被调用

时间:2014-03-30 19:05:18

标签: ios objective-c uitextfield subclass method-overriding

我创建了一个UITextField的子类来覆盖方法rightViewRectForBounds。

这是我的自定义类CustomTextField

@interface CustomTextField : UITextField

@end

@implementation CustomTextField

// override rightViewRectForBounds method:
- (CGRect)rightViewRectForBounds:(CGRect)bounds{
    NSLog(@"rightViewRectForBounds");
    CGRect rightBounds = CGRectMake(bounds.origin.x + 10, 0, 30, 44);
    return rightBounds ;
}

@end

现在我设置我的ViewController来调用自定义类而不是UITextField。

#import "OutputViewController.h"
#import "CustomTextField.h"

@interface OutputViewController () <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet CustomTextField *field1;
@property (strong, nonatomic) IBOutlet UILabel *label1;

 - (void)methodName
{
self.field1.rightView = self.label1;
}

属性rightView应该根据Apple的文档调用我的方法覆盖:“右侧覆盖视图放在由接收器的rightViewRectForBounds:方法返回的矩形中”。为什么我的覆盖不起作用?

对不起,如果这是一个糟糕的问题。我只编程了一个月。

1 个答案:

答案 0 :(得分:1)

问题很可能是field1实际上不是CustomTextField。通过断点或一些记录很容易确认这一点。

请记住,声明类的东西是不够的。那个东西实际上必须 那个类(多态)。实例具有类,完全不考虑您如何投射或声明引用它的变量。