我做到了。
头
#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);
}
并将此TextField设置为IB。
并使用此
[self.mailTextField setValidation:validationBlock];
这是工作。
-(BOOL) textFieldShouldEndEditing:(UITextField *)textField{
return validation(textField);
}
这个方法叫做。我可以验证。
但是,当我选择带有像globe这样的按钮的键盘时(将英文键盘更改为日文键盘或其他东西), 在模拟器中发生EXC_BAD_ACCESS。
启用Zombies,但控制台不显示任何内容。
发生了什么?当我选择键盘时。为什么会出现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