回覆列表
  • 1 # 冰哥說引流

    最近經常用到搜尋類的佈局,大體是這樣的

    上面是一個navigationController,接下來一個searchBar,下面是tableView

    searchBar這個控制元件就用來搜尋tableView上的資料

    [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];

    UISearchDisplayController這個控制元件很強大,它初始化是基於searchBar的,裡面有些效果很不錯,apple都封裝好了,並且可以很好的支援實時搜尋,即我們只需要將搜尋出來的資料重新賦給array(這個array用來儲存tableView資料),不需要reloadData,就會自動出來

    其實reloadData也沒用,為什麼呢?因為搜尋出來的結果顯示在tableView上,該tableView並不是當前佈局的那個tableView,而是另外一個,我猜測應該是UISearchDisplayController裡面自帶的,所以不要混淆了

    特別是在tableView代理方法裡,有時候需要判斷代理方法傳入的tableView是否為當前佈局的tableView,因為也有可能是UISearchDisplayController裡自帶的,它們同樣會觸發代理方法

    經過測試,如果上面是navigationBar,則searchBar不會移動,但如果是UINavigationController自帶過來的,則會上移覆蓋

    往往有的時候都是UINavigationController自帶過來的,如果使用UISearchDisplayController,searchBar就會自動覆蓋,這個情況我試了很多次,包括新建立了一個navigationBar蓋在上面,但效果依然不好,對於這種情況,基於我目前的技術,只能捨棄UISearchDisplayController,單純的用UISearchBar了,雖然效果差了一些,但需要實現的功能照樣可以,比如實時搜尋,除了重新賦值給array外,額外的操作就是需要reloadData了。

    - (void)setShowsCancelButton:(BOOL)showsCancelButton animated:(BOOL)animated

    相信看方法名字就知道是做什麼的了

  • 中秋節和大豐收的關聯?
  • 為什麼天蠍男喜歡虐人?