私はこれを作りました。
ヘッダ
#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);
}
このメソッドが呼び出されます。検証できます。
しかし、地球儀のようなボタンでキーボードを選択すると(英語キーボードを日本語キーボードに変更するなど)、Simulator で 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