как уже избежать “определенной ошибки” в C++

Так же, как матовый комментарий к 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];
}

6
задан Craig M. Brandenburg 29 February 2016 в 22:35
поделиться

3 ответа

Кажется, есть опция, которую можно использовать для игнорирования таких ошибок: в настройках проекта> ссылка> установите флажок «Принудительный вывод файла». Это сгенерирует программу, даже если есть ошибки компоновки.

Результат сборки дает примерно следующее:

msvcrt.lib (MSVCRT.dll): warning LNK4006: _atoi уже определено в LIBC.lib (atox.obj); второе определение игнорируется

Конечно, вам нужно будет использовать эту опцию с осторожностью, так как она может создать приложение, которое в некоторых случаях не будет работать, но здесь это, вероятно, не причинит никакого вреда (надеюсь).

Спасибо за другие ответы, но в моем конкретном случае это не подходило.

1
ответ дан 8 December 2019 в 14:46
поделиться

У вас конфликт времени выполнения. Использование нескольких библиотек времени выполнения, как правило, плохо.

Вы можете использовать / nodefaultlib: msvcrt (или / nodefaultlib: libc) в параметрах компоновщика, чтобы исключить одно или другое.

Собственно, прежде чем прибегать к этому, проверьте настройки вашего проекта. Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой.

Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой.

Если я правильно помню, libc - это однопоточная среда выполнения в VS6, а msvcrt - многопоточная среда выполнения. Если в вашем решении несколько проектов, убедитесь, что все они используют один или другой.

4
ответ дан 8 December 2019 в 14:46
поделиться

Эта ошибка определенно означает, что вы связываете две части кода, которые были скомпилированы с использованием разных библиотек времени выполнения. MSVCRT.dll - это динамическая версия, а LIBC.lib - статическая. Если вы сделаете это, весь ад вырвется наружу. Попробуйте найти, какие части вашего кода используют какую версию, и разберитесь с этим.

11
ответ дан 8 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: