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
Это все еще работает на меня с ключом "searchField" без подчеркивания. Быстро 5
guard let searchField = searchBar.value(forKey: "searchField") as? UITextField else { return }
Если Вы хотите 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
}
}
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
}
}
Если мы хотим поддерживать 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 и ранее
For iOS 13 +
Наряду с UISearchBarBackground
, теперь мы имеем UISearchBarSearchContainerView
и UISearchBarScopeContainerView
, тогда как UISearchBarTextField
отсутствует, который заменяется расширением, обеспеченным Apple в [1 112] класс
extension UISearchBar {
open var searchTextField: UISearchTextField { get }
}
, Таким образом, мы можем непосредственно получить доступ searchBar.searchTextField
в iOS 13 и выше устройств, тогда как это приведет к катастрофическому отказу, если мы попытаемся получить доступ к этому свойству в iOS 12 и ниже устройств ОС.
катастрофический отказ будет похож на это:
[UISearchBar searchTextField]: нераспознанный селектор, отправленный в экземпляр
Вот, является документом Apple для этого
Можно осуществить проверку как это для 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 это помогает
Я получаю катастрофический отказ на значении кнопки отмены forkey. Действительно ли возможно настроить кнопку отмены в iOS 13.