2

所以我在控制器中放置了一些文本字段..

控制器扩展了 UITextFieldDelegate,因此它为这些文本字段处理 textFieldDidBeginEditing,一切正常!

然后我尝试从一个名为 TestTextField 的新类中添加一个新的文本字段。

我将故事板中的自定义类更改为 TestTextField 并实现了以下方式:(发生的情况是模拟器启动并且 NSLog 打印“init!”,然后当我按下 TestTextField NSLog 打印“开始”,然后模拟器停止EXC_BAD_ACCESS。)

测试文本域.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

文本字段.h

#import <UIKit/UIKit.h>

@interface TestTextField : UITextField <UITextFieldDelegate>

@end
4

3 回答 3

1

我有完全相同的问题,这似乎只发生在 iOS 模拟器 5 上。

看起来在初始化时设置委托会使应用程序崩溃。

只需注释该self.delegate = self行即可消除错误。

所以我最终(不是很好,但是嗯)把我self.delegate = self- (void) touchesBegan:. 这样,我确信当有人开始打字时我的委托就设置好了。

于 2012-04-29T14:41:55.953 回答
1

我也遇到过同样的问题。我终于通过调整autocorrectionType.

请将您的文本字段设置为autocorrectionType = UITextAutocorrectionTypeNo;

希望这能解决您的问题。

于 2013-09-02T09:33:26.600 回答
0

现在我很确定发生了什么,因为这是很久以前的事了。

我 99% 确定这个问题是由于 XCode 中的“自定义类”值留下了一些不再存在的旧值。

于 2012-06-02T08:31:11.073 回答