2011-07-08 5 views
2

Как скрыть клавиатуру после того, как пользователь нажмет кнопку «Готово» или удалит UITextField?Как скрыть клавиатуру iPhone App

Я поместил этот код в AppDelegate:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return NO; 
} 

И я связала делегат UITextField в IB к файлу владелицей ..

Что я делаю не так?

РЕДАКТИРОВАТЬ: Возвращение Чанги НЕТ -> возврат ДА ничего не делает. У меня есть IB open и нажимает на вкладку владельца файла -> connections, есть несколько реферирующих точек, все указывающие на поля UIText. Он по-прежнему ISN; т работать ..

UPDATE:

Я добавил это к моей функции:

- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    int i = 5; 
    NSLog(@"%d", i); 
    return YES; 
} 

Ничто не выходит напечатанный на консоль, когда я нажимаю возвращение после установки фокуса на текстовом поле. .. Так что это не вызов функции. Я что-то связал неправильно? У меня есть ключ возврата, действующий как «Done'too», не уверен, что это имеет значение?

UPDATE:

У меня была функция testfieldShouldReturn в моей AppDelegate вместо моего ViewController. Моя ошибка .... Спасибо за помощь ребята

+0

Контроллер вашего вида принимает протокол 'UITextFieldDelegate'? –

+1

Проверьте, кто является владельцем файла. У вас есть контроллер вида для наконечника? Если это так, поместите 'textFieldShouldReturn:' в контроллер вида. – dasdom

+0

@dasdom, спасибо. вы решили мою проблему – user559142

ответ

1

Ваш код выглядит хорошо. Можете ли вы убедиться, что соединение с делегатом настроено правильно? Попробуйте добавить NSLog в метод делегата, чтобы узнать, даже если он вызван.

...

Ваш вопрос точек обновления к этому, безусловно, является проблемой подключения. Попробуйте то, что предлагает Винс, и явно задайте делегат в коде. Вероятно, вы захотите сделать это в методе viewDidLoad вашего контроллера представлений, чтобы убедиться, что textField действительно загружен до того, как вы установите его делегат. Расскажите о том, работает ли это.

+0

Я сделал это (обновленный оригинальный пост), но ничего не печатается ... – user559142

+0

Можете ли вы попробовать явно указать делегата textview. Трудно понять, что пойдет не так, не увидев ваш xib-файл, но если вы установите код делегата ein, мы можем быть уверены, что это произойдет. – CharlieMezak

0

Замените return NO; на return YES;.

Это работает в моем коде.

EDIT: Я был неправ. Возвращаемое значение здесь не является проблемой. Клавиатура должна скрываться при вызове resignFirstResponder.

+1

Я не вижу, как здесь должно меняться возвращаемое значение функции. Как бы то ни было, метод * уже * сказал текстовому полю уйти в отставку с первого ответчика. В любом случае, возвращение yes означает, что текстовое поле вводит символ возврата каретки в конец его содержимого, чего не хочет OP. – CharlieMezak

+0

Я не думаю, что это правильно. – dasdom

+0

, который не работает – user559142

0

Поскольку вы хотите, чтобы текстовое поле возвращалось. Вы должны return YES; вместо NO.

+0

те же комментарии, что и на ответ dasdom ниже – CharlieMezak

1

Просто установите делегат приложения в качестве делегата вашего UITextField.

[textField setDelegate:self]; 

Установите его в -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; методы делегата своего приложения.

+0

Так что * была * проблема. Делегат текстового поля настроен неправильно. Винс подбирает представителей, а остальные нас препираются. : P – CharlieMezak

+0

@CharlieMezak: Вы правы. Я действительно поклонник ваших двух комментариев по ответу на dasdom. Поэтому я тоже проголосовал за них обоих, потому что вы указали на что-то совершенно истинное. –

+0

Спасибо, V-man! :) – CharlieMezak

0

В вашем .h

-(IBAction)hideKeyboard:(id)sender; 

В вашем .m или.мм

-(IBAction)hideKeyboard:(id)sender { 
    [(UITextField*)sender resignFirstResponder]; 
} 

Затем просто соедините их в конструкторе интерфейса с текстовым полем «Закончено на выход».

0

Надежда это видео учебник поможет вам ..

http://www.thenewboston.com/?p=1368&pOpen=tutorial

Вызов, который textFieldShouldReturn функция на возврат Нажмите клавишу, чтобы сделать это:

1) щелчок правой текстовое поле, откуда ключ доска всплывает. 2) Выберите первый вариант «Закончился при выходе». 3) Перетащите синюю линию на владельца файла, и у вас будет возможность выбрать опцию функции «hideKeyboard»

И все готово.

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