Uygulamamın kullanıcılarının, UICollectionView
'un üzerinde bir UISearchBar
kullanarak resimleri aramasına izin vermek istiyorum. Anlayışım gereği, UICollectionView
düzgün çalışması için UICollectionViewController
olmalıdır. Ancak Xcode, UICollectionViewController
numaralı telefona arama çubuğu eklememe izin vermez. Koleksiyon görünümü düzgün çalışmayacağından genel bir UIViewController
kullanamıyorum. İstediğim işlevselliği nasıl sağlayabilirim?UICollectionView'ın üzerinde bir arama çubuğunu nasıl ekleyebilirim?
cevap
UICollectionViewController
'un içinde UICollectionView
olması zorunlu değildir. UICollectionView
, UITableView
gibidir ve her yere eklenebilir. Tek yapmanız gereken, UICollectionViewDelegate
ve UICollectionViewDataSource
protokollerini uygulamaktır. Aşağıdaki eğiticiyi Supplementary Header takip edebilir ve UICollectionView
ek üstbilgi olarak arama çubuğunu ekleyebilirsiniz.
Bunu yaptım UICollectionViewDelegate ve UICollectionViewDataSource –
'u uyguladığım halde NSExceptions alıyordum. İstisna neydi? –
Swift3 + Storyboard numaralı uygulama ileViewView + SearchBar.
Başlık View Oluşturma:
yeniden görünümü özel sınıf
oluşturun:Search Bar Oluşturma
Set yeniden görünümü özel sınıf
arama çubuğu çıkış
Trick oluşturun: arama bağlayın KOLEKSİYON GÖRÜNÜM sınıfına çubuğu temsilci, arama çubuğu çıkış
Searchbar temsilci Set protokol
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if (kind == UICollectionElementKindSectionHeader) {
let headerView:UICollectionReusableView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "CollectionViewHeader", for: indexPath)
return headerView
}
return UICollectionReusableView()
}
ait CollectionView başlık yöntemini uygulamak ÖZEL REUSABLE GÖRÜNÜM CLASS gider
class MyCollectionViewController: (other delegates...), UISearchBarDelegate {
Ve son olarak, arama çubuğu temsilci yöntemleri aşağıdaki bağlantıyı bulmak için CollectionView Sınıf
//MARK: - SEARCH
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if(!(searchBar.text?.isEmpty)!){
//reload your data source if necessary
self.collectionView?.reloadData()
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if(searchText.isEmpty){
//reload your data source if necessary
self.collectionView?.reloadData()
}
}
Maalesef bu yaklaşımın birkaç yan etkisi vardır; Arama çubuğu her bölümün başlığında görünecek, arama çubuğu görünmez kayar ve self.collectionView? .reloadData() çağrıldığında arama çubuğu ilkResponder durumunu kaybeder. UISearchController'ı UICollectionView https://github.com/jeremiah-de/CollectionViewSearch/tree/basic-collection-view ile kullanmak için Jeremiah-de büyük adım adım repo'yu inceleyin. – aumansoftware
içinde adı verilecek, bu size yardımcı olabilir. [example-nasıl yapılır entegre-uicollectionview with uisearchbar -1] (https://maniacdev.com/2015/01/example-how-to-integrate-uicollectionview-with-uisearchbar) – Chandan