IOS 13 - Пользовательская панель поиска с UISearchBar searchField не работает

https://docs.python.org/2/library/re.html

Лучше использовать регулярное выражение. Это намного быстрее.

import re

def f1(string):
    return any(i.isdigit() for i in string)


def f2(string):
    return re.search('\d', string)


# if you compile the regex string first, it's even faster
RE_D = re.compile('\d')
def f3(string):
    return RE_D.search(string)

# Output from iPython
# In [18]: %timeit  f1('assdfgag123')
# 1000000 loops, best of 3: 1.18 µs per loop

# In [19]: %timeit  f2('assdfgag123')
# 1000000 loops, best of 3: 923 ns per loop

# In [20]: %timeit  f3('assdfgag123')
# 1000000 loops, best of 3: 384 ns per loop

20
задан Pratik Sodha 19 June 2019 в 12:11
поделиться

6 ответов

Это все еще работает на меня с ключом "searchField" без подчеркивания. Быстро 5

guard let searchField = searchBar.value(forKey: "searchField") as? UITextField else { return }
5
ответ дан 28 November 2019 в 02:35
поделиться

Если Вы хотите iOS Version проверки!

 if #available(iOS 13.0, *) {
    searchBar.searchTextField.clearButtonMode = .never
 } else {
    searchBar.textField.clearButtonMode = .never
 }

не Забывают расширение:

extension UISearchBar {

 var textField : UITextField{
    return self.value(forKey: "_searchField") as! UITextField
 }
}
3
ответ дан 28 November 2019 в 02:35
поделиться
extension UISearchBar {

    var textField : UITextField? {
        if #available(iOS 13.0, *) {
            return self.searchTextField
        } else {
            // Fallback on earlier versions
            return value(forKey: "_searchField") as? UITextField
        }
        return nil
    }
}
0
ответ дан 28 November 2019 в 02:35
поделиться

Если мы хотим поддерживать iOS 12 и ранее также при компиляции с Xcode 11, то мы можем сделать расширение UISearchBar, где мы можем захватить ИСПОЛЬЗОВАНИЕ текстового поля

extension UISearchBar {

    var textField : UITextField? {
        if #available(iOS 13.0, *) {
            return self.searchTextField
        } else {
            // Fallback on earlier versions
            for view : UIView in (self.subviews[0]).subviews {
                if let textField = view as? UITextField {
                    return textField
                }
            }
        }
        return nil
    }
}

searchBar.textField?.font = UIFont.systemFont(ofSize: 15.0)

Здесь, мы можем получить доступ к свойствам всего текстового поля и изменить согласно нашим потребностям в UISearchBar

в иерархии представления существует изменение. Таким образом путем печати self.subviews[0]).subviews, где self в UISearchBar


For iOS 12 и ранее

enter image description here

For iOS 13 +

enter image description here

Наряду с UISearchBarBackground, теперь мы имеем UISearchBarSearchContainerView и UISearchBarScopeContainerView, тогда как UISearchBarTextField отсутствует, который заменяется расширением, обеспеченным Apple в [1 112] класс

extension UISearchBar {


    open var searchTextField: UISearchTextField { get }
}

, Таким образом, мы можем непосредственно получить доступ searchBar.searchTextField в iOS 13 и выше устройств, тогда как это приведет к катастрофическому отказу, если мы попытаемся получить доступ к этому свойству в iOS 12 и ниже устройств ОС.

катастрофический отказ будет похож на это:

[UISearchBar searchTextField]: нераспознанный селектор, отправленный в экземпляр

enter image description here

Вот, является документом Apple для этого

6
ответ дан 28 November 2019 в 02:35
поделиться

Можно осуществить проверку как это для iOS 11 и более ранних версий:

if #available(iOS 11, *){
            self.searchBar.placeholder = "Search by Name"
            self.searchBar.setSerchFont(textFont: UIFont(name:AppFontLato.Regular, size:14.0 * DeviceInfo.aspectRatio()))
            self.searchBar.setSerchTextcolor(color: Colors.black51)
        }
        else{
            if let searchTextField = self.searchBar.value(forKey: "_searchField") as? UITextField, let clearButton = searchTextField.value(forKey: "_clearButton") as? UIButton {
                searchTextField.placeholder = "Search by Name"
                searchTextField.font = UIFont(name:AppFontLato.Regular, size:14.0 * DeviceInfo.aspectRatio())
                searchTextField.textColor = Colors.black51
            }
        }

Hope это помогает

0
ответ дан 28 November 2019 в 02:35
поделиться

Я получаю катастрофический отказ на значении кнопки отмены forkey. Действительно ли возможно настроить кнопку отмены в iOS 13. enter image description here

0
ответ дан 28 November 2019 в 02:35
поделиться
Другие вопросы по тегам:

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