2009-07-11 3 views
1

Я пытаюсь реализовать приветственное приложение для iPhone для iPhone, и я работал с некоторыми из них. Однако я не могу понять, как заставить клавиатуру уйти. Я видел this и нет, это не помогает (у меня есть resignFirstResponder в моем коде). Я связал соответствующее текстовое поле с владельцем файла как делегата. Вот код, который определяет, должен ли клавиатура исчезают:Клавиатура не исчезает, когда я нажимаю «Готово» на iPhone.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

Я уверен, что это должно быть смешно очевидно, но я не могу найти ответ. Заранее спасибо за вашу помощь!

ответ

4

Прежде всего, чтобы уточнить: вы должны связать делегат текстового поля с владельцем файла, а не с делегатом владельца файла в текстовое поле. Это может показаться запутанным, но вы можете легко проверить это, выбрав свое текстовое поле в Interface Builder и проверив, что его «делегировать» указывает на владельца файла.

Далее, что произойдет, если вы вынесете заявление if в свой код? Связывание делегата текстового поля с владельцем файла, а затем изменение вашего кода на:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    [theTextField resignFirstResponder]; 
    return YES; 
}

должно давать желаемые результаты.

Если это все еще не работает, убедитесь, что класс владельца файла совпадает с классом, в котором реализован этот метод. Например, если код находится в RootViewController.m, то вы хотите указать, что владелец файла является экземпляром RootViewController в Interface Builder.

+0

Я думаю, что я не понимал делегата, да, я подключил его, как вы указали. По какой-то причине удаление инструкции if упростило ситуацию. благодаря! – RCIX

0

код

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == textField) 
    { 
     [textField resignFirstResponder]; 
    } 
    return YES; 
} 

является своего рода провал.

Вы не вызывали resignFirstResponder в параметр метода делегата, вы вызывали его так, как я предполагаю, это переменная экземпляра. Это должно было быть написано следующим образом:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == [self textField]) { 
     [theTextField resignFirstResponder]; 
    } 
    return YES; 
} 
+0

Конечно, для использования кода, который я предоставил, textField должен быть свойством. На самом деле вам никогда не следует общаться с переменными экземпляра. Для этого нужны свойства. Свойства обеспечивают приятную, счастливую инкапсуляцию, управляемую памятью, для того, чтобы вы могли делать что-то с переменными экземпляра. –

Смежные вопросы