У меня есть приложение для iPad, использующее протокол UITextFieldDelegate. Я заявляю и внедряю полный протокол. Поле, вызывающее этот протокол, объявляется следующим образом:
typingInput = [ [ [ UITextField alloc ] initWithFrame: textIn ] retain ];
dp.x = center.x;
dp.y = center.y - 42;
typingInput.center = dp;
[ self addSubview: typingInput ];
[ typingInput release ];
typingInput.font = [ UIFont systemFontOfSize: 52.0 ];
[ typingInput setTextColor: [ UIColor whiteColor ] ];
typingInput.backgroundColor = [ UIColor colorWithWhite: 0.0 alpha: 0.0 ];
typingInput.alpha = 0.0;
typingInput.userInteractionEnabled = NO;
[ typingInput addTarget: self action: @selector(textField:shouldChangeCharactersInRange:replacementString:) forControlEvents: UIControlEventEditingChanged | UIControlEventAllEditingEvents ];
typingInput.text = @"";
typingInput.autocorrectionType = UITextAutocorrectionTypeNo;
typingInput.enablesReturnKeyAutomatically = YES;
typingInput.delegate = self;
Проблема с
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange: (NSRange)qrange replacementString: (NSString *)str;
В симуляторе тип времени выполнения 'str' либо nil, либо NSCFString в соответствии с этим:
NSLog(@"class = %@, value='%@'", [ str class ], str );
Все отлично работает, когда я редактирую строку.
На iPad возвращается тот же оператор записи:
class = UIFieldEditor, value='<UIFieldEditor: 0xb5f400; frame = (0 0; 640 640); text = 'Foobar'; opaque = NO; layer = <UIWebLayer: 0x113ba0>>'
Последующее использование 'str' в качестве строки NSSt вызывает сбой на iPad, когда я пытаюсь добавить, изменить или удалить текст. qrange также недопустим (длина - какое-то огромное число).
UIFieldEditor является частью UIWebView.h, который я не использую.
В некоторой степени изменение объявления членов протокола влияет на поведение.
Поскольку я не могу найти кого-то еще с этой проблемой, я должен предположить, что я делаю что-то не так.
Есть идеи?