Swift: Как показать клавиатуру с дополнительным видом, содержащим текстовое поле, которое становится первым респондентом

Поддержка

sqlite3 в Python может быть немного запутанной. Адаптер базы данных sqlite начинался как отдельный проект pysqlite2 , но для Python 2.5 его версия была включена в стандартную библиотеку Python под именем sqlite3 . Оригинальный адаптер продолжает разрабатываться как отдельный проект, периодически обновляя версию в Python, чтобы соответствовать ей. Если вы пытаетесь использовать более новую версию адаптера, она обычно устанавливается как pysqlite2, чтобы не противоречить версии, включенной в стандартную библиотеку. И, в зависимости от того, как он был построен, он может ссылаться на другую версию базовой библиотеки sqlite3 database . Поэтому убедитесь, что вы импортируете его правильно:

>>> import sqlite3
>>> sqlite3.version_info
(2, 4, 1)
>>> sqlite3.sqlite_version_info
(3, 6, 11)

>>> from pysqlite2 import dbapi2 as sqlite3
>>> sqlite3.version_info
(2, 5, 5)
>>> sqlite3.sqlite_version_info
(3, 6, 18)

version_info - это версия адаптера базы данных sqlite3 (pysqlite2 или встроенного sqlite3). sqlite_version_info - это версия базовой библиотеки базы данных sqlite3.

Рекомендуется использовать from ... import ... as sqlite3, чтобы остальная часть вашего кода не изменялась, если вы переходите от одной версии к другой.

Примечание. enable_load_extension впервые появился в pysqlite2 2.5.0.

EDIT: enable_load_extension отключен по умолчанию при создании адаптера , Чтобы включить его, вы можете создать pysqlite2 вручную. Следующий рецепт предполагает систему unix -y и самую последнюю версию pysqlite2, которая на момент написания этой статьи составляет 2.5.5.

Во-первых, если вы первоначально установили адаптер через easy_install удалите его, выполнив первый запуск:

$ sudo /path/to/easy_install -m pysqlite # or whatever package name you first used

Будет выведен какой-то вывод, включая строки, такие как:

Removing pysqlite 2.5.5 from easy-install.pth file

Using /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

Удалите яйцо, используя указанное имя файла (имя будет меняться в зависимости от вашей платформы и версии, и может ссылаться на файл или каталог):

$ sudo rm -r /path/to/site-packages/pysqlite-2.5.5-py2.x-something.egg

Теперь загрузите и извлеките исходный архив pysqlite-2.5.5:

$ mkdir /tmp/build
$ cd /tmp/build
$ curl http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz | tar xz
$ cd pysqlite-2.5.5

Затем отредактируйте файл setup.cfg, чтобы прокомментировать директиву SQLITE_OMIT_LOAD_EXTENSION:

$ ed setup.cfg < /SQLITE_OMIT_LOAD_EXTENSION/s/define=/#define=/
> w
> q
> EOF

Поскольку версия sqlite3 настолько старая (3.4.0), вы также должны построить с последним sqlite3 ] библиотека. Это облегчено в сценарии pysqlite2 setup.py:

$ /path/to/python2.x setup.py build_static

Это автоматически загрузит последний источник сборки sqlite3 и построит адаптер вместе с -date статически связанную версию sqlite3.

UPDATE (2015/07/21): В соответствии с последним pysqlite 2.6.3 commit вам нужно загрузить исходный код sqlite на (g19) Теперь установите адаптер:

$ sudo /path/to/python2.x setup.py install

и запустите тесты:

$ cd     # somewhere out of the build directory
$ /path/to/python2.x
>>> from pysqlite2 import test
>>> test.test()

и, если

В качестве бонуса, если причина, по которой вы хотите поддерживать расширение загрузки, заключается в использовании полнотекстового расширения sqlite3, FTS3, вы должны обнаружить, что это был включен как часть статической библиотеки, и дальнейшая работа не требуется:

>>> from pysqlite2 import dbapi2 as sqlite3
>>> con = sqlite3.connect(":memory:")
>>> con.execute("create virtual table recipe using fts3(name, ingredients)")

0
задан Karthick Ramesh 17 January 2019 в 05:33
поделиться

1 ответ

Я не уверен на 100%, чего ты хочешь достичь. Этот код откроет клавиатуру при нажатии кнопки и покажет textField только тогда, когда пользователь начнет печатать.

Когда кнопка нажата, мы устанавливаем скрытый ответчик textField в true. Таким образом, мы поднимаем клавиатуру, не показывая textField. Когда пользователь начинает печатать, мы открываем текстовое поле и изменяем его ограничения, чтобы они были над клавиатурой.

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textFieldBottomConstraint: NSLayoutConstraint!

    var keyboardHeight: CGFloat = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
        textField.isHidden = true
        textField.delegate = self

        NotificationCenter.default.addObserver(
            self,
            selector: #selector(keyboardWillShow),
            name: UIResponder.keyboardWillShowNotification,
            object: nil
        )
    }

    @objc func buttonPressed() {
        textField.becomeFirstResponder()
    }

    @objc func keyboardWillShow(_ notification: Notification) {
        if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
            let keyboardHeight = keyboardFrame.cgRectValue.height
            self.keyboardHeight = keyboardHeight
        }
    }
}

extension ViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        textField.isHidden = false
        textFieldBottomConstraint.constant = keyboardHeight
        return true
    }
}
0
ответ дан Mocha 17 January 2019 в 05:33
поделиться
Другие вопросы по тегам:

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