Так же, как матовый комментарий к samvermette, мне также не нравится идея обнаружения «\ n». Клавиша «возврата» существует по причине в UITextView, то есть, конечно, для перехода к следующей строке.
Лучшее решение, на мой взгляд, состоит в том, чтобы имитировать приложение для сообщений iPhone - добавить панель инструментов (и кнопку) на клавиатуре.
Я получил код из следующего поста в блоге:
http://www.iosdevnotes.com/2011/02/iphone-keyboard-toolbar/
Шаги:
-Добавить панель инструментов в ваш файл XIB - установить высоту 460
-Добавить элемент кнопки панели инструментов (если еще не добавлен). Если вам нужно выровнять его по правому краю, также добавьте элемент кнопки гибкой панели в XIB и переместите элемент кнопки панели инструментов
- Создайте действие, связывающее ваш элемент кнопки с resignFirstResponder, следующим образом:
- (IBAction)hideKeyboard:(id)sender {
[yourUITextView resignFirstResponder];
}
-Затем:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect frame = self.keyboardToolbar.frame;
frame.origin.y = self.view.frame.size.height - 260.0;
self.keyboardToolbar.frame = frame;
[UIView commitAnimations];
}
- (void)keyboardWillHide:(NSNotification *)notification {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect frame = self.keyboardToolbar.frame;
frame.origin.y = self.view.frame.size.height;
self.keyboardToolbar.frame = frame;
[UIView commitAnimations];
}
Кажется, есть опция, которую можно использовать для игнорирования таких ошибок: в настройках проекта> ссылка> установите флажок «Принудительный вывод файла». Это сгенерирует программу, даже если есть ошибки компоновки.
Результат сборки дает примерно следующее:
msvcrt.lib (MSVCRT.dll): warning LNK4006: _atoi уже определено в LIBC.lib (atox.obj); второе определение игнорируется
Конечно, вам нужно будет использовать эту опцию с осторожностью, так как она может создать приложение, которое в некоторых случаях не будет работать, но здесь это, вероятно, не причинит никакого вреда (надеюсь).
Спасибо за другие ответы, но в моем конкретном случае это не подходило.
У вас конфликт времени выполнения. Использование нескольких библиотек времени выполнения, как правило, плохо.
Вы можете использовать / nodefaultlib: msvcrt (или / nodefaultlib: libc) в параметрах компоновщика, чтобы исключить одно или другое.
Собственно, прежде чем прибегать к этому, проверьте настройки вашего проекта. Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой.
Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой. Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой.Эта ошибка определенно означает, что вы связываете две части кода, которые были скомпилированы с использованием разных библиотек времени выполнения. MSVCRT.dll - это динамическая версия, а LIBC.lib - статическая. Если вы сделаете это, весь ад вырвется наружу. Попробуйте найти, какие части вашего кода используют какую версию, и разберитесь с этим.