2012-02-17 1 views
2

Я делаю weeapp для центра уведомлений с помощью iOSOpenDev. У меня есть UITextField на UIView и внедрили протокол UITextFieldDelegate.Почему кнопка UITextField не работает в iOS 5 WeeApp?

Моя проблема заключается в том, что метод textFieldShouldClear никогда не вызывается при нажатии кнопки очистки в UITextField. Другие методы интерфейса, такие как shouldChangeCharactersInRange и textFieldShouldReturn, вызываются без проблем.

Любые идеи, почему метод интерфейса никогда не называется?

ответ

0

Убедитесь, что представитель TextField является самостоятельным:

theTextField.delegate = self; 

Я слышал, что UIActionSheet сосет протокол UITextFieldDelegate, и центр уведомлений может сделать то же самое ...

+0

Делегат textField уже настроен на себя, но это не имеет никакого значения. – icecreamhead

+0

Найдите все, что изменяет делегат UITextfield (кроме того, который устанавливает его на себя) и прокомментирует его. Затем посмотрите, работает ли он. Я бы использовал что-то, что пишет в файл, потому что NSLog в вашей ситуации тяжело. –

1

Я имел эту проблему когда я отклонял клавиатуру, когда пользователь прослушивал в другом месте экрана. У меня был распознаватель жестов, который искал краны, и когда был обнаружен кран, он вызывал resignFirstResponder в текстовое поле. К сожалению, это сломает кнопку очистки.

Что я сделал фильтр кранов, чтобы убедиться, что они находятся вне поля зрения таблицы, немного усложнены, чтобы вручную вызвать нажатия кнопок:

// In: - (void)handleTap:(UITapGestureRecognizer *)sender { 
// The user tapped outside a text field, drop the keyboard. 
// Unfortunately this normally breaks the clear button, so we'll check that the 
// tap is outside the table view (and therefore not on a clear button). 
BOOL inButton = CGRectContainsPoint(self.signInButton.bounds, [sender locationInView:self.signInButton]); 
BOOL inTable = CGRectContainsPoint(self.tableView.bounds, [sender locationInView:self.tableView]); 
if (!inTable && !inButton) { 

    BOOL didEndEditing = [self.view endEditing:NO]; 

    // But... if we were editing a field (& therefore the keyboard is showing), 
    // and if they tapped the sign in button, sign in. Not sure where the 
    // onSignIn event is getting lost. The button does highlight. But the 
    // call to endEditing seems to eat it. 
    if (didEndEditing && inButton) { 
     [self onSignIn:self.signInButton]; 
    } 
} 
0

После ответа Грэма перки, я изменил мой resignFirstResponder вызов:

[self.focusInput performSelector: @selector(resignFirstResponder) 
         withObject: nil 
         afterDelay: 0.2f]; 

Теперь клавиатура автоматически скрыта на кранах по назначению, но функциональность кнопки очистки вернулась.