自定義搜索控制器頁面

其實搜素界面的輪子很多,但是之所以再寫,是因為發現市面上的很多框架,包括高分框架都是替我們制定了幾種類型的搜素頁面樣式, 但是如果我們產品提出了另一種樣式的要求,自定義頁面很不方面. 基于能夠更方面的自定義搜索頁面的目的, 寫下這個輪子.

LLSearchViewControllerBase結構說明

LLSearchViewControllerBase說明

LLSearchViewControllerBase使用的是 MVP 模式.尾部有Presenter或者P的都是對應名稱的業務邏輯主持人,可以理解為業務處理者. 把業務邏輯代碼從ViewController中抽取出來,分配到每個 view模塊對應的Presenter中. 在實際項目中,MVVM 太過于細化, 需要很多的橋接方法, 我并不是很喜歡, MVC 模式又很容易讓新上手的人把c寫的很臃腫, MVP模式是一種很折中的模式.

實現功能

  • (1)自定義搜索頁面View
  • (2)歷史搜索
  • (3)分類標簽
  • (4)即時搜索結果匹配。
LLSearchViewControllerBase結構說明

每個功能模塊極其展示 view都盡可能的獨立出來.

關于自定義搜索界面

ExtensionView文件夾下邊類,是搜索頁面的[歷史搜索模塊,分類模塊,即時匹配結果模塊]的 view, ExtensionPresenter中是歷史搜索頁面的業務處理者. 而[歷史搜索模塊,分類模塊]的業務處理者我則放到了SSearchVC目錄下,這樣做其實并不是特別好, 我這么做是為了 demo 的展現, 在實際項目中, 其實你可以完全放到ExtensionPresenter文件夾下.

LLSearchViewControllerBase結構說明
  • 我自定義了處理歷史搜索記錄-LLNaviSearchHistorySaveBasePresenter的基類和搜索控制器-LLNaviSearchBaseVC頁面的基類,子類只需要繼承這兩個類就可以.
  • 分類模塊即時匹配模塊沒有基類,也不需要, 你如果不想要這兩個功能,直接不實現其方法或者刪掉相關代碼即可.
  • LLSearchNaviBarView是一個帶有搜索框的模擬導航欄,你在任何地方都可以用它.

其中:

  1. 歷史搜索基類有保存,清理,獲取保存記錄方法. 子類繼承之后,需要在實現下面代碼(注意:指明存儲文件名字)

    • (instancetype)init{
      if (self = [super init]) {
      //code...
      self.saveUtils = [[LLSearchHistorySaveUtils alloc] initWithSearchHistoriesCacheFileName:NearByShopSearchMapAddressHistoryCacheFileName];

      }
      return self;
      }

  1. 控制器 ViewController需要在繼承之后, 指定各模塊的業務處理者是誰

     -(void)viewDidLoad {    
       //告訴父類你的歷史搜索prestenter是什么
       self.shopHistoryP = [HistoryAndCategorySearchHistroyViewP new];
       //告訴父類你的分類prestenter是什么
       self.shopCategoryP = [HistoryAndCategorySearchCategoryViewP new];
       [super viewDidLoad];
     }
    

其他

進一步說明

歷史搜索分類模塊都是頁面動態或者提前加載的, 為了顯示動態還在的過程,我在HistoryAndCategorySearchVC這個搜索控制器調用的時候, 特意模擬網絡數據延遲3s, 在實際操作中,為了保證體驗,建議提前加載保存到本地最好, 我這里并沒有針對分類提供本地持久化的方法.

即時結果匹配這個功能, 只要實現下邊這三個方法,即默認開啟.

/**
 即時搜索匹配框,匹配的數據列表
 */
@property (nonatomic,strong) NSArray<NSString *> *resultListArray;
/**
 搜索框:用戶即時輸入完畢
 @param didChangeBlock 更改后的回調
 */
- (void)searchbarDidChange:(searchBarDidChangeBlock)didChangeBlock;

/**
 即時匹配結果列表cell點擊事件
 */
- (void)resultListViewDidSelectedIndex:(resultListViewCellDidClickBlock)cellDidClickBlock;

最后, 下面幾個控制器調用的地方,提供了部分搜索頁面接口展示:


LLSearchViewControllerBase結構說明

?

內存泄露檢測

因為我沒有采用代理的方法,而是采用的bloc.開始第一版有些地方weakSelf并沒有寫全,導致了泄露問題,結合MLeaksFinder和Instruments進行了修復,但是使用MLeaksFinder 在 dealloc 方法已經執行了,還會報錯內存泄露, 而Instruments 的 call tree 沒有內容,有偶爾情況會全部報綠色對勾說沒有泄露,不知道什么原因. 如果有朋友有好的檢測內存泄露的方法,一定也告訴我下,我也學習下! 感謝提出內存泄露這個問題的朋友!

Demo地址

LLSearchViewController

交流


希望能和大家交流技術
Blog:http://www.lilongcnc.cc


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容