将类别添加到 UITextView 并在 UITextView 在 xib 时覆盖它的 init 函数

Posted

技术标签:

【中文标题】将类别添加到 UITextView 并在 UITextView 在 xib 时覆盖它的 init 函数【英文标题】:Add category to UITextView and Override it's init function while UITextView is in xib 【发布时间】:2014-06-04 06:33:57 【问题描述】:

我无法拦截在 xib 文件中创建时调用的 init 函数。

我想在它创建时添加边界线,这样我就不需要手动添加它了。

.h:

#import <UIKit/UIKit.h>

@interface UITextView (FITAddBorderline)
- (id) init;
- (id) initWithFrame:(CGRect)frame;
@end

.m:

#import "UITextView+FITAddBorderline.h"

@implementation UITextView (FITAddBorderline)

- (id) init

    self = [super init];
    if (self) 
        [self addBorderline];
    
    return self;


- (id) initWithFrame:(CGRect)frame 

    self = [super init];
    if (self) 
        self.frame = frame;
        [self addBorderline];
    
    return self;


- (void) addBorderline 

    //To make the border look very close to a UITextField
    [self.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
    [self.layer setBorderWidth:2.0];

    //The rounded corner part, where you specify your view's corner radius:
    self.layer.cornerRadius = 5;
    self.clipsToBounds = YES;


@end

【问题讨论】:

【参考方案1】:

来自 NIB 的视图被初始化为 initWithCoder:

- (id)initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];

    if (self)
    
        [self addBorderline];
    

    return self;

作为旁注,我建议更改您正在做的事情并使用子类而不是类别。您可能会遇到一些麻烦,覆盖类别中的方法。 See more info here.

【讨论】:

【参考方案2】:

你只需要实现awakeFromNib方法:

-(void)awakeFromNib


    [super awakeFromNib];
    [self addBorderline];

【讨论】:

以上是关于将类别添加到 UITextView 并在 UITextView 在 xib 时覆盖它的 init 函数的主要内容,如果未能解决你的问题,请参考以下文章

可变高度 UITextView

UITextView 中的每个数字只允许一位小数(Swift 4)

将新的 UITextView 动态添加到 UIscrollView

UITextView 中不必要的换行符

如何将 UITextView 添加到 UITableView 详细信息

如何将双击手势添加到 UITextView