所以我的控制器里放了一些文字区域。
Controller扩展了UITextFieldDelegate,因此它为那些文本字段处理textFieldDidBeginEditing,并且一切正常!
然后我尝试从名为TestTextField的新类中添加一个新的文本字段。
我将故事板中的自定义类更改为TestTextField,并按以下方式实现: (结果是模拟器启动并且NSLog打印“init!”然后当我按下TestTextField时NSLog打印“begin”,之后模拟器停止EXC_BAD_ACCESS。)
TestTextField.m
#import "TestTextField.h"
@implementation TestTextField
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (id) initWithCoder:(NSCoder *) coder
{
self = [super initWithCoder:coder];
NSLog(@"init!");
self.delegate = self;
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
NSLog(@"begin");
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"end ");
}
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
return YES;
}
@end
TextField.h
#import <UIKit/UIKit.h>
@interface TestTextField : UITextField <UITextFieldDelegate>
@end
答案 0 :(得分:1)
我有完全相同的问题,这似乎只发生在iOS模拟器5上。
看起来在init设置委托会使应用程序崩溃。
只需评论self.delegate = self
行即可消除错误。
所以我结束了(不是很好,但是呃)将我的self.delegate = self
放在一个过载的- (void) touchesBegan:
中。这样,我确定当有人开始输入时我的代理被设置了。
答案 1 :(得分:1)
我遇到过同样的问题。我终于通过调整autocorrectionType
来解决这个问题。
请将您的文字字段设置为autocorrectionType = UITextAutocorrectionTypeNo;
希望这可以解决您的问题。
答案 2 :(得分:0)
到目前为止,我很确定发生了什么,因为这是很久以前的事了。
我99%肯定这个问题是由于XCode中的“自定义类”值留下了一些不再存在的旧值。