UITextView子类 - 如何覆盖委托函数shouldChangeTextInRange?

时间:2016-01-04 11:35:13

标签: objective-c delegates uitextview subclass uitextviewdelegate

我已经将UITextView子类化,并希望覆盖shouldChangeTextInRange委托函数来处理最大行数。所以我有以下设置:

@interface CustomFieldView : UITextView <UITextViewDelegate>

然后在.m中,当我从IB加载视图时,我在initWithCoder中将子类委托给自己:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if (self)
    {
        self.textContainer.lineFragmentPadding = 0;
        self.textContainerInset = UIEdgeInsetsZero;

        self.constraintHeight = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:0];

        [self setScrollEnabled:NO];

        self.delegate = self;
    }

    return self;
}

我正在使用属性文本,但是,出于调试原因,我还设置了常规文本,这导致了问题:

[self setAttributedText:string];
[self setText:[string string]];

这可以按预期工作并设置文本,但是,我在委托函数中设置了断点:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return YES;
}

但是从未打过电话,任何人都可以告诉我为什么会这样?我没有在任何其他调用函数或IB中设置委托,所以我知道这是设置的。如果我闯入设置文本的函数和po代理,我得到以下内容:

(lldb) po self.delegate
<CustomFieldView: 0x7fc01b099a00; baseClass = UITextView; frame = (8 79.5; 584 49); text = ' • Desired Sizes: Large '; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; tag = 9; gestureRecognizers = <NSArray: 0x7fc01a5d9000>; layer = <CALayer: 0x7fc01be06840>; contentOffset: {0, 0}; contentSize: {584, 49}>

所以它确实设置正确。那么,任何人都可以看到任何理由作为代理函数不会被调用的原因吗?我也尝试了 - (void)textViewDidChange:(UITextView *)textView函数,它也没有被调用。

非常感谢有关如何从子类覆盖/实现委托函数的任何指导。

谢谢, 埃利奥特

0 个答案:

没有答案