我已经将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函数,它也没有被调用。
非常感谢有关如何从子类覆盖/实现委托函数的任何指导。
谢谢, 埃利奥特