Для Swift 2.0 вы можете поместить этот код в viewDidLoad, и он будет работать как прелесть.
if #available(iOS 9.0, *) {
let item = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
В Swift 3.0 и 4.0
youtTextField.inputAssistantItem.leadingBarButtonGroups.removeAll()
yourTextField.inputAssistantItem.trailingBarButtonGroups.removeAll()
Однако лучший способ использовать это для подкласса поля UIText и использовать вышеуказанный код в фазе init (). Или создать расширение Вместо того, чтобы использовать его в viewDidLoad для каждого текстового поля.
Это может быть сделано, но это довольно болезненно: Вы не можете сделать этого путем простого соединения со статической библиотекой.
Рассматривают это: ресурсы встраиваются в EXE или DLL. Когда некоторый код в статических вызовах библиотеки (например). LoadIcon, это получит ресурсы от EXE или DLL, с которым это связано.
Так, если Ваша статическая библиотека требует, чтобы ресурсы были доступны, у Вас есть несколько опций:
CreateDialogIndirect
. Посмотрите, что Raymond Chen "Создает диалоговый шаблон во времени выполнения" . char my_dialog_resource[] = { .... };
, и затем используют (например). CreateDialogIndirect
. Необходимо будет, вероятно, найти (или запись) утилиту, которая преобразовывает от .RES
файлы к .CPP
файлы. .RC
файл) и соответствующий заголовочный файл. Вы затем #include
их как релевантный. Необходимо будет зарезервировать диапазон идентификаторов ресурса для LIB для использования, так, чтобы они не сталкивались с теми из основного EXE или DLL. Это - то, что делает MFC при использовании в качестве статической библиотеки. Или можно использовать идентификаторы строкового ресурса (это не работает на STRINGTABLE
ресурсы). Я не думаю так. Статическая библиотека не имеет своего собственного HINSTANCE. Это - код, выполняется в контексте DLL или EXE, который связывает его. Вот почему все ресурсы, которые Вы попытаетесь загрузить из кода статической библиотеки, будут иметь то включение DLL/EXE.
я сделал такое повторное использование ресурсов с DLL, хотя, насколько оно имеет свое собственное адресное пространство, и можно назвать LoadResource с HINSTANCE DLL.
Рекомендуемый путь состоит в том, чтобы предоставить dll ресурсы вместе с Вашей библиотекой.
Я только что прошел через это с компилятором MS Visual Studio. Мы конвертировали некоторые устаревшие проекты из DLL в статические библиотеки. В некоторые из этих DLL встроены диалоговые или строковые ресурсы. Мне удалось скомпилировать сценарии .RC для этих библиотек DLL в наше основное приложение, включив их в файл сценария RC основного приложения с помощью механизма «TEXTINCLUDE». Я нашел, что проще всего сделать это, отредактировав файл RC напрямую, но Visual Studio также предоставляет немного более «волшебный» механизм. Реализация в других компиляторах, скорее всего, отличается.
Для непосредственного управления основным сценарием RC:
.1. В разделе «2 TEXTINCLUDE» включите файл заголовка, который определяет идентификаторы ресурсов для вашей библиотеки. Синтаксис
2 TEXTINCLUDE
BEGIN
"#include ""my_first_lib_header.h""\r\n"
"#include ""my_second_lib_header.h""\0"
END
.2. В разделе «3 TEXTINCLUDE» включите сценарий RC из своей библиотеки.
3 TEXTINCLUDE
BEGIN
"#include ""my_first_library.rc""\r\n"
"#include ""my_second_library.rc""\0"
END
Шаги 3 и 4 должны выполняться автоматически, но я обнаружил, что более надежно просто ввести их самостоятельно, а не полагаться на компилятор сценария ресурсов Microsoft забота о вещах.
.3. Добавьте файл заголовка с определениями ресурсов библиотеки в список символов только для чтения. Этот список обычно находится в верхней части файла.
#define APSTUDIO_READONLY_SYMBOLS
#include "my_first_lib_header.h"
#include "my_second_lib_header.h"
#undef APSTUDIO_READONLY_SYMBOLS
.4. Включите сценарий RC вашей библиотеки в раздел APSTUDIO_INVOKED. Обычно это находится в нижней части файла.
#ifndef APSTUDIO_INVOKED
#include "my_first_library.rc"
#include "my_second_library.rc"
#endif
Вы также можете сделать все это автоматически через IDE Visual Studio, но я обнаружил, что это не всегда применяется, когда я ожидал.
Если ваша библиотека ' сценарий ресурсов ссылается на любые файлы на диске (текстовые файлы, файлы значков и т. д.), вам необходимо убедиться, что проект основного приложения знает, где их найти. Вы можете скопировать эти файлы туда, где ваше приложение сможет их найти, или вы можете добавить дополнительный путь включения в настройки компилятора.
Чтобы добавить дополнительный путь включения:
Единственное, что вам нужно сделать для использования ресурсов (изображений, диалогов и т. Д.) В статической библиотеке в Visual C ++ (2008), - это включить связанную статическую библиотеку .res файл в вашем проекте. Это можно сделать в «Настройки проекта / Компоновщик / Вход / Дополнительные зависимости».
В этом решении ресурсы статической библиотеки упаковываются в .exe, поэтому вам не нужна дополнительная DLL. К сожалению, Visual Studio не включает файл .res автоматически, как это делается для файла .lib (при использовании функции «зависимости проекта»), но я думаю, что этот небольшой дополнительный шаг приемлем.
Я искал очень долго для этого решения, и теперь меня удивляет, что это так просто. Проблема только в том, что это совершенно недокументировано.