UITextView 的自定义委托
Posted
技术标签:
【中文标题】UITextView 的自定义委托【英文标题】:Custom Delegate fo UITextView 【发布时间】:2012-06-13 20:46:19 【问题描述】:我是 UITextView 的子类,并且我得到了它的工作,但我还想在调用 UITextView 委托方法时做一些额外的工作。这是我到目前为止所拥有的。
ThanaaTextView.h
#import <UIKit/UIKit.h>
#import "ThaanaDelegate.h"
@interface ThaanaTextView : UITextView
@private
ThaanaDelegate * _thaanaDelegate;
ThanaaTextView.m
#import "ThaanaTextView.h"
@implementation ThaanaTextView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
//do some extra stuff to textview
//set delegate
self.delegate = _thaanaDelegate;
return self;
@end
这是我的委托课程
ThaanaDelegate.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface ThaanaDelegate : NSObject <UITextViewDelegate>
NSMutableArray* _lines;
+(NSString*) reverseText:(NSString*) text withFont:(UIFont*) font carretPosition:(NSRange*) cpos Lines:(NSMutableArray*) lines Bounds:(CGRect) bounds;
-(void) setText:(NSString*) txt textview:(UITextView *)textView;
@end
ThaanaDelegate.m
-(BOOL) textView:(UITextView*) textView shouldChangeTextInRange:(NSRange) range replacementText:(NSString*) text
//delegate method i want to do things in
return NO;
-(void) setText:(NSString*) txt textview:(UITextView *)textView
//stuff
return txt;
它编译并运行没有错误。但从不调用委托函数。我错过了什么。
【问题讨论】:
【参考方案1】:当您初始化 ThanaTextView 时,委托尚未设置。
self.delegate = _thaanaDelegate;
_thaanaDelegate 此时为零。因此,您将其设置为 nil。
编辑:
ThaanaTextView *ttv = [[ThaanaTextView alloc] initWithFrame:textViewFrame];
ttv.delegate = someDelegateHere;
【讨论】:
您可以在您的 init 方法之后设置它(不是在您的方法中,而是在调用它之前)。或使用自定义初始化方法,如 initWithDelegate ... 您必须在创建对象后设置它。 @user1226119 在 alloc 之后但在 init 之前设置属性是一个非常糟糕的主意。 @CrimsonDiego,天哪,我写的时候累了。显然你必须在分配之后设置它。 我知道。我说的是在 after alloc 之前但在 init 之前设置它是一个坏主意,因为它违反了 Cocoa 约定。疲倦不是抨击某人的借口。下次请仔细阅读。以上是关于UITextView 的自定义委托的主要内容,如果未能解决你的问题,请参考以下文章
Swift-自定义 UITableViewCell 委托给 UIViewController 只有一个协议有效