Я пишу приложение для iPhone, в котором мне нужен пользовательский класс UITextField. Для моих текстовых полей мне нужен отступ, изображение внутри перед текстом и максимальными символами. По этой причине я создал собственный класс на основе UITextField. Все мои текстовые поля будут основаны на этом новом классе. Я использую Google и обыскаю Stackoverflow, и я обнаружил, что в таких случаях, как мой, мне нужно использовать self.delegate = self;
во время init
, поэтому мне не нужно реализовывать такие методы, как textFieldShouldBeginEditing
или textFieldShouldEndEditing
внутри класса View Controller. Все мои текстовые поля будут созданы в раскадровке, так что initWithCoder
. В результате я получаю бесконечный цикл и крах приложения (я использую симулятор в этот момент) после ввода 1, 2 или 3 символа. Интересно, что для цифровой клавиатуры или клавиатуры для пароля такой проблемы нет. Также, если я набираю символы на моей клавиатуре Mac вместо симулятора, нет проблем. Я пытался отлаживать, но во время сбоя он перескакивает прямо в цикл и существует с ошибкой. Как преодолеть эту проблему?Пользовательский делегат UITextField, установленный для самостоятельной инициализации бесконечного цикла
P.S. Я спросил question, когда получаю бесконечный цикл, и были комментарии, которые self.delegate = self;
может вызвать такой цикл, но я вижу, что это утверждение широко используется. Возможно, я сделал это неправильно, но я не могу понять, как сделать многоразовый класс из UITextField.
EDIT: Вот мой код:
На Инти я инициализировать и установить цвет границы:
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self) {
self.layer.borderColor=[[UIColor blackColor] CGColor];
self.delegate = self;
}
return self;
}
Когда я начинаю редактировать меняю цвет границы и установить отступ (отступ набор будет переехал в собственность сеттер):
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
// Change border of text field that is editing to orange
textField.layer.masksToBounds=YES;
textField.layer.borderColor=[[UIColor orangeColor] CGColor];
textField.layer.borderWidth= 1.0f;
UIView *spacerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _leftIndent, 10)];
[self setLeftViewMode:UITextFieldViewModeAlways];
[self setLeftView:spacerView];
return YES;
}
на редактирование финише я вернусь обратно цвет:
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
// Change border of text field that is edited to black
textField.layer.masksToBounds=YES;
textField.layer.borderColor=[[UIColor blackColor] CGColor];
textField.layer.borderWidth= 1.0f;
return YES;
}
И на изменении значения я просматриваю не более символов:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
// Restrict number of symbols in text field to "maxSymbols"
NSUInteger oldLength = [textField.text length];
NSUInteger replacementLength = [string length];
NSUInteger rangeLength = range.length;
NSUInteger newLength = oldLength - rangeLength + replacementLength;
BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;
return newLength <= (int)_maxSymbols || returnKey;
}
Можете ли вы разместить свои методы textFieldShouldBeginEditing и textFieldShouldEndEditing здесь? – F1ank3r
Удалось ли вам это решить? Я не вижу ничего очевидного. Попытайтесь выяснить, какая строка вашего кода вызывает бесконечный цикл. – F1ank3r
Нет, это вообще. Когда я отлаживаю и пропускаю 1 или 2 символа в текстовом поле, он запускает бесконечный цикл и сбой. – new2ios