2016-07-13 19 views
5

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?

+0

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

cevap

1

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.

+0

Bunu yaptım UICollectionViewDelegate ve UICollectionViewDataSource –

+0

'u uyguladığım halde NSExceptions alıyordum. İstisna neydi? –

18

Swift3 + Storyboard numaralı uygulama ileViewView + SearchBar.

Başlık View Oluşturma:

Creating the Search Bar

yeniden görünümü özel sınıf

oluşturun:

Creating the Header View

Search Bar Oluşturma

Create the reusable view custom class

Set yeniden görünümü özel sınıf

Set the reusable view custom class

arama çubuğu çıkış

Create the search bar outlet in custom class

Trick oluşturun: arama bağlayın KOLEKSİYON GÖRÜNÜM sınıfına çubuğu temsilci, arama çubuğu çıkış

Connect the search bar delegate to collection view class

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() 
    } 
} 
+4

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

İlgili konular