ios - 未调用子类覆盖方法

标签 ios objective-c uitextfield subclass 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;
}

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

很抱歉,如果这是一个糟糕的问题。我才编程一个月。

最佳答案

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

请记住,仅仅声明某物的类别是不够的。那个东西实际上必须是 那个类(多态性)。一个实例一个类,完全不用考虑如何转换或声明引用它的变量。

关于ios - 未调用子类覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748450/

相关文章:

ios - 水平翻转视频如果这样则没有镜像效果

javascript - iOS WKWebView javascript 警报在 iPad 上崩溃

ios - 如何将@IBAction函数数据获取到TableView中?

ios - 一个 iphone 应用程序是否可以读取另一个应用程序的日志?

objective-c - 如何在 Objective-C 中将 unichar 值转换为 NSString?

ios - 如何在 iOS 6 中显示表格部分标题?

ios - 未声明的标识符 FIRAuth

ios - 崩溃 : com. apple.main-thread - 应用程序在 Guard 语句上随机崩溃

iphone - 如何在iOS中为文本框边框设置十六进制颜色

ios - UITextField 边框在左侧和底部不同