2015-01-13 2 views
1

Я хочу разработать код доступа, как функциональность в моем приложении. Для этого я использую текстовые поля. Включение passocode выполняется успешно. Теперь я хочу реализовать четкий текст кода доступа, введенный на кнопку обратной кнопки номерной панели. Вот мой фрагмент кода объявляя протоколаdeleteBackward не получает вызов для пользовательского UITextfield

@objc protocol BackPressDelegate { 

func backPressed(info: NSDictionary) 
} 

class CustomTextField: UITextField, UIKeyInput { 

var del1:BackPressDelegate? 

override func deleteBackward() { 

     super.deleteBackward() 

     if ((self.delegate?.respondsToSelector("backPressed")) != nil) { 

      self.del1?.backPressed(["tag":self.tag]) 
     } 
    } 
} 

Для делать это, я создал подкласс UITextField, в котором я есть переопределение «deleteBackward()» method.i также установить делегат UITextField в раскадровке. Моя проблема с этим - deleteBackward - , не получивший вызов по какой-то причине, когда я нажимаю кнопку на номерной знак.

+0

Вы установили делегат для CustomTextFiled, т.е. переменная 'del1'? – Woodstock

+0

Да, я установил делегат в свой диспетчер view. – MURR

+0

такой же выпуск со мной. –

ответ

2

Попробуйте Подкласс:

// customTextField.h 
#import <UIKit/UIKit.h> 
@protocol customTextFieldDelegate <NSObject> 
@optional 
- (void)TextFieldWillDelete:(TextField*)textField; 
@end 

// customTextField.m 
#import "customTextField.h" 
@implementation customTextField 

- (void)deleteBackward { 
    if([[[UIDevice currentDevice] systemVersion] intValue] < 8) { 
     [super deleteBackward]; 
    } 
    if ([_deleteDelegate respondsToSelector:@selector(TextFieldWillDelete:)]){ 
     [_deleteDelegate TextFieldWillDelete:self]; 
    } 
} 

- (BOOL)keyboardInputShouldDelete:(TextField *)textField { 
    BOOL shouldDelete = YES; 

    if ([TextField instancesRespondToSelector:_cmd]) { 
     BOOL (*keyboardInputShouldDelete)(id, SEL, UITextField *) = (BOOL (*)(id, SEL, UITextField *))[UITextField instanceMethodForSelector:_cmd]; 

     if (keyboardInputShouldDelete) { 
      shouldDelete = keyboardInputShouldDelete(self, _cmd, textField); 
     } 
    } 

    if ([[[UIDevice currentDevice] systemVersion] intValue] >= 8) { 
     [self deleteBackward]; 
    } 

    return shouldDelete; 
} 

// yourViewController.m 
@interface yourViewController() <customTextFieldDelegate> 
@end 
@implementation 
-(void)TextFieldWillDelete:(TextField*)textField { 
    NSLog(@"will delete: %@", textField.text); 
} 
@end 

же, как и UITextView.