UISearchController
belgeleri, denetleyicinin kullanması için UISearchBar
özel bir alt sınıf sağlamak üzere - searchBar
geçersiz kılabileceğinizi belirtir. Özel arama çubuğu kullanılır ve kendi delege yöntemleri doğru çağrılır, ancak arama çubuğu değiştiğinde UISearchResultsUpdating
yöntemi artık çağrılmaz. El ile birçok kablolama işlemi yapmam gerekiyor mu, yoksa denetleyicinin doğal olarak sağlanan bir arama çubuğunda olduğu gibi davranmasını sağlamak için eksik bir şey var mı?UISearchController ile Özel UISearchBar
cevap
Bu bilinen bir hatadır. Maalesef, özel API'yi içermeyen bir geçici çözüm bulunmamaktadır.
Bunu detaylandırır mısınız? Bilinen bir hata olarak bu sorunun herhangi bir sözünü bulamıyorum. – pbuchheit
@Alex UISearchController yalnızca iOS 8 ve üzerinde kullanılabilir. Derleyici, sınıfı iOS 7 ve altında tanımayacaktır. Yalnızca iOS 8 ve üzerini destekleyene kadar UISearchDisplayController ile sabitleyin. –
@MyztikJenz, bu hata ile ilgili herhangi bir değişiklik olup olmadığını biliyor musunuz? Benim sorunum, arama sonuçları tablosunun tamamen gösterilmemesidir çünkü 'UISearchResultsUpdating' özel bir 'UISearchBar' ile arama metni değişikliklerine çağrılmamaktadır. – artooras
Sanırım böyle davranması gerekiyordu.
Bu
UISearchController.h// You are free to become the search bar's delegate to monitor for text changes and button presses.
@property (nonatomic, retain, readonly) UISearchBar *searchBar;
dan Tüm bu temsilci yöntemi (updateSearchResultsForSearchController :) onun arama çubuğunu erişebilmesi için arama denetleyicisi dönmek etmez.
Bunu yalnızca özel arama çubuğu temsilci yöntemleriniz aracılığıyla yapabilirsiniz.
UISearchController alt sınıfını seçtiğinizde, UISearchBar'ı getterde özelleştirebilirsiniz (ayarlayıcı mevcut değil).
Örnek - alt sınıf uygulanmasında: Bu kimse yardımcı
-(UISearchBar*)searchBar{
UISearchBar *baseSearchBar = [super searchBar];
if (baseSearchBar.showsScopeBar) {
baseSearchBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 88);
}else{
baseSearchBar.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 44);
}
return baseSearchBar;
}
Umut. Özel UISearchController sınıfında SearchBar alıcı, bu özel Searchbar dönmek zorunda ve var
Yine de bana çok yardımcı oldu. –
geçersiz kıl zaten, o zaman kurulum özellikleri yalnızca UISearchController init sonra, bu şekilde tüm UISearchController işlevselliği korunur başlatılması için:
public class DSearchController: UISearchController {
private var customSearchBar = DSearchBar()
override public var searchBar: UISearchBar {
get {
return customSearchBar
}
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
public init(searchResultsController: UIViewController?,
searchResultsUpdater: UISearchResultsUpdating?,
delegate: UISearchControllerDelegate?,
dimsBackgroundDuringPresentation: Bool,
hidesNavigationBarDuringPresentation: Bool,
searchBarDelegate: UISearchBarDelegate?,
searchBarFrame: CGRect?,
searchBarStyle: UISearchBarStyle,
searchBarPlaceHolder: String,
searchBarFont: UIFont?,
searchBarTextColor: UIColor?,
searchBarBarTintColor: UIColor?, // Bar background
searchBarTintColor: UIColor) { // Cursor and bottom line
super.init(searchResultsController: searchResultsController)
self.searchResultsUpdater = searchResultsUpdater
self.delegate = delegate
self.dimsBackgroundDuringPresentation = dimsBackgroundDuringPresentation
self.hidesNavigationBarDuringPresentation = hidesNavigationBarDuringPresentation
customSearchBar.setUp(searchBarDelegate,
frame: searchBarFrame,
barStyle: searchBarStyle,
placeholder: searchBarPlaceHolder,
font: searchBarFont,
textColor: searchBarTextColor,
barTintColor: searchBarBarTintColor,
tintColor: searchBarTintColor)
}
}
Ve bu benim özel searchbar geçerli:
public class DSearchBar: UISearchBar {
var preferredFont: UIFont?
var preferredTextColor: UIColor?
init(){
super.init(frame: CGRect.zero)
}
func setUp(delegate: UISearchBarDelegate?,
frame: CGRect?,
barStyle: UISearchBarStyle,
placeholder: String,
font: UIFont?,
textColor: UIColor?,
barTintColor: UIColor?,
tintColor: UIColor?) {
self.delegate = delegate
self.frame = frame ?? self.frame
self.searchBarStyle = searchBarStyle
self.placeholder = placeholder
self.preferredFont = font
self.preferredTextColor = textColor
self.barTintColor = barTintColor ?? self.barTintColor
self.tintColor = tintColor ?? self.tintColor
self.bottomLineColor = tintColor ?? UIColor.clearColor()
sizeToFit()
// translucent = false
// showsBookmarkButton = false
// showsCancelButton = true
// setShowsCancelButton(false, animated: false)
// customSearchBar.backgroundImage = UIImage()
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
let bottomLine = CAShapeLayer()
var bottomLineColor = UIColor.clearColor()
override public func layoutSubviews() {
super.layoutSubviews()
for view in subviews {
if let searchField = view as? UITextField { setSearchFieldAppearance(searchField); break }
else {
for sView in view.subviews {
if let searchField = sView as? UITextField { setSearchFieldAppearance(searchField); break }
}
}
}
bottomLine.path = UIBezierPath(rect: CGRectMake(0.0, frame.size.height - 1, frame.size.width, 1.0)).CGPath
bottomLine.fillColor = bottomLineColor.CGColor
layer.addSublayer(bottomLine)
}
func setSearchFieldAppearance(searchField: UITextField) {
searchField.frame = CGRectMake(5.0, 5.0, frame.size.width - 10.0, frame.size.height - 10.0)
searchField.font = preferredFont ?? searchField.font
searchField.textColor = preferredTextColor ?? searchField.textColor
//searchField.backgroundColor = UIColor.clearColor()
//backgroundImage = UIImage()
}
}
Init örnek:
searchController = DSearchController(searchResultsController: ls,
searchResultsUpdater: self,
delegate: self,
dimsBackgroundDuringPresentation: true,
hidesNavigationBarDuringPresentation: true,
searchBarDelegate: ls,
searchBarFrame: CGRectMake(0.0, 0.0, SCREEN_WIDTH, 44.0),
searchBarStyle: .Minimal,
searchBarPlaceHolder: NSLocalizedString("Search a location...", comment: ""),
searchBarFont: nil,
searchBarTextColor: nil,
searchBarBarTintColor: UIColor.whiteColor(),
searchBarTintColor: iconsColor)
searchController.searchBar.keyboardAppearance = .Dark
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
- 1. UISearchBar özel köşeler
- 2. UISearchController
- 3. UISearchBar
- 4. UISearchBar, sonuç tablosuna dokunulduğunda temizlenir
- 5. UISearchBar UITableViewHeader alt görünümünde?
- 6. UISearchBar
- 7. UISearchBar
- 8. UISearchController segue
- 9. UISearchController dizini, indexPath üzerinde
- 10. UISearchController iOS8
- 11. UISearchBar ile hazırForSpag ile indexPath.row sorununu giderme
- 12. Broken UISearchBar animasyonu navigationItem'e gömülü
- 13. UISearchBar, neden geri giderken garip bir şekilde yanıp sönüyor?
- 14. UISearchBar OtomatikKayıt Hatası Üzerinde AramaResultsController
- 15. iPhone UISearchBar & keyboardAppearance
- 16. UISearchController, iptal düğmesine bastıktan sonra VC'yi kapatır
- 17. UISearchController siyah kontrolörü
- 18. Bir UISearchController kullanarak UISearchController kullanarak nesnelerin ayrıntıya geçmemesiView
- 19. benim tableView verileri filtrelemek için bir iç UISearchController ile tableViewController kullanıyorum UISearchController
- 20. UISearchController UI donmasını yapar
- 21. UISearchController Arama Çubuğunu Gizle
- 22. UISearchBar UITableViewController içinde?
- 23. UITextField vs UISearchBar?
- 24. MonoTouch'da UISearchBar nasıl uygulanır
- 25. UISearchBar İptal Düğmesi Çalışmıyor
- 26. UISearchBar kapsam çubuğu nasıl görünür?
- 27. UISearchBar üzerindeki UITableView arka plan rengi
- 28. UISearchBar tıklandığında üst kısmına gidiyorum
- 29. iPhone: UISearchBar "" String nasıl aranır?
- 30. UISearchBar berrak arka plan görüntüsü
Hiçbir şey orada göremediğim alt sınıf UISearchController kullanmıyor – farski
Bu sorun hakkında herhangi bir güncelleştirme oldu mu? Ben aynı şekilde mücadele ediyorum. İptal düğmesine basmaktan kaçınmak için özel 'UISearchBar' ve 'UISearchController' kullandım. Artık, "UISearchResultsUpdating", arama metni değişikliklerine çağrılmıyor ve bu nedenle sonuç tablosu hiç gösterilmiyor. – artooras