我做的。
标题
#import <UIKit/UIKit.h>
typedef BOOL (^validationType)(UITextField *textField);
@interface GLPValidationTextField : UITextField<UITextFieldDelegate>
@property (copy, nonatomic) validationType validation;
@end
身体
#import "GLPValidationTextField.h"
@implementation GLPValidationTextField
@synthesize validation;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (id)initWithCoder:(NSCoder *)inCoder {
if (self = [super initWithCoder:inCoder]) {
self.delegate = self;
}
return self;
}
#pragma - mark UITextField delegate
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField{
return validation(textField);
}
并且,用 IB 设置这个 TextField。
并且,使用这个
[self.mailTextField setValidation:validationBlock];
这是工作。
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField{
return validation(textField);
}
这个方法叫。我可以验证。
但是,当我用地球之类的按钮选择键盘(将英文键盘更改为日文键盘或其他东西)时,会在模拟器中出现 EXC_BAD_ACCESS。
启用僵尸,但控制台什么也不显示。
发生了什么?当我选择键盘时。为什么会出现 EXC_BAD_ACCESS?
当发生 EXC_BAD_ACCESS 总是 Xcode 显示
libobjc.A.dylib`lookUpMethod:
0x1647a9a: pushl %ebp
0x1647a9b: movl %esp, %ebp
0x1647a9d: pushl %ebx
0x1647a9e: pushl %edi
0x1647a9f: pushl %esi
0x1647aa0: subl $28, %esp
0x1647aa3: calll 0x1647aa8 ; lookUpMethod + 14 // Thread 1:EXC_BAD_ACCESS