我正在创建自己的子类,它基本上是一个UIView
包含 aUILabel
和 a的子类UITextField
。
所以我仍然希望 的委托方法UITextField
起作用,所以我创建了自己的称为协议的协议MyLabeledInputViewDelegate
,它基本上UITextField
以这种方式包装了 的委托方法:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
return [self.delegate inputViewShouldReturn:self];
}
而且我因为 textField 是我自己的类的一个实例的属性,所以我当然将它设置为这样的委托:
if (self.delegate) self.textField.delegate = self;
但是,似乎如果我MyLabeledInputView
将委托设置为初始化,则nil
由于某种原因会立即崩溃。
我是否正确设置了它,或者我缺少什么?非常感谢!
我指定的初始化程序是这样的:
- (id)initWithFrame:(CGRect)frame
titleRelativeLength:(float)length
titleText:(NSString *)text
titleBackgroundColor:(UIColor *)color
titleTextColor:(UIColor *)textColor
textFieldBGColor:(UIColor *)textFieldBGColor
textFieldTextColor:(UIColor *)textFieldTextColor
delegate:(id<WRLabeledInputViewDelegate>)delegate;
实现是这样的:
- (id)initWithFrame:(CGRect)frame titleRelativeLength:(float)length titleText:(NSString *)text titleBackgroundColor:(UIColor *)color titleTextColor:(UIColor *)textColor textFieldBGColor:(UIColor *)textFieldBGColor textFieldTextColor:(UIColor *)textFieldTextColor
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.titleRelativeLength = length;
self.title = text;
self.titleBackgroundColor = color;
self.titleTextColor = textColor;
self.textFieldBackgroundColor = textFieldBGColor;
self.textFieldTextColor = textFieldTextColor;
}
return self;
}
基本上只捕获传入的属性,然后我将 UITextField 的委托设置layoutSubviews
为我自己的类的实例。