iOS中 UISearchController 搜尋欄 UI技術分享

來源:互聯網
上載者:User

iOS中 UISearchController 搜尋欄 UI技術分享


UISearchController 繼承自UIViewController

    // 在iOS 8.0以上版本中, 我們可以使用UISearchController來非常方便地在UITableView中添加搜尋方塊. 而在之前版本中, 我們還是必須使用UISearchBar + UISearchDisplayController的組合方式.

#import SearchViewController.h#define kTableCell @tablecell@interface SearchViewController ()@property(nonatomic,retain)NSMutableArray *items;@property(nonatomic,retain)UISearchController *searchController;@property(nonatomic,retain)NSMutableArray *searchResults;//接收資料來源結果@end

懶載入及釋放

 

@implementation SearchViewController- (instancetype)init{    self = [super init];    if (self) {        }    return self;}//懶載入- (NSMutableArray *)items{    if (!_items) {        self.items = [NSMutableArray arrayWithCapacity:0];    }    return [[_items retain]autorelease];}//懶載入- (NSMutableArray *)searchResults{    if (!_searchResults) {        self.searchResults = [NSMutableArray arrayWithCapacity:0];    }    return [[_searchResults retain]autorelease];}//釋放- (void)dealloc{    self.items = nil;    self.searchResults = nil;    self.searchController = nil;    [super dealloc];}

調用:

 

 

- (void)viewDidLoad {    [super viewDidLoad];    //導覽列    [self p_navigationController];    //調用初始化searchController    [self setSearchControllerView];        //註冊    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kTableCell];    }

 

初始化SearchController初始化

 

- (void)setSearchControllerView{    self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];    self.searchController.searchBar.frame = CGRectMake(0, 0, 0, 44);    self.searchController.dimsBackgroundDuringPresentation = false;    //搜尋欄表頭視圖    self.tableView.tableHeaderView = self.searchController.searchBar;    [self.searchController.searchBar sizeToFit];//背景顏色    self.searchController.searchBar.backgroundColor = [UIColor orangeColor];    self.searchController.searchResultsUpdater = self;}

 

//引入UISearchController之後, UITableView的內容也要做相應地變動: 即cell中要呈現的內容是items, 還是searchResults.這一點, 可以通過UISearchController的active屬性來判斷, 即判斷輸入框是否處於active狀態.

//UITableView相關的很多方法都要根據active來做判斷:


配置導航條

 

- (void)p_navigationController{    self.title = @小韓哥-英雄列表;    self.items = @[@國服第一臭豆腐 No.1 Stinky Tofu CN.,                   @比爾吉沃特(Bill Ji walter),                   @瓦洛蘭 Valoran,                   @祖安 Zaun,                   @德瑪西亞 Demacia,                   @諾克薩斯 Noxus,                   @艾歐尼亞 Ionia,                   @皮爾特沃夫 Piltover,                   @弗雷爾卓德 Freijord,                   @班德爾城 Bandle City,                   @無畏先鋒,                   @戰爭學院 The Institute of War,                   @巨神峰,                   @雷瑟守備(JustThunder),                   @裁決之地(JustRule),                   @黑色玫瑰(Black Rose),                   @暗影島(Shadow island),                   @鋼鐵烈陽(Steel fierce),                   @恕瑞瑪沙漠 Shurima Desert,                   @均衡教派(Balanced sect),                   @水晶之痕(Crystal Scar),                   @影流(Shadow Flow ),                   @守望之海(The Watchtower of sea),                   @皮爾特沃夫,                   @征服之海,                   @扭曲叢林 Twisted Treeline,                   @教育網專區,                   @試煉之地 Proving Grounds,                   @卡拉曼達 Kalamanda,                   @藍焰島 Blue Flame Island,                   @哀嚎沼澤 Howling Marsh,                   @艾卡西亞 Icathia,                   @鐵脊山脈 Ironspike Mountains,                   @庫莽古叢林 Kumungu,                   @洛克法 Lokfar,                   @摩根小道 Morgon Pass,                   @塔爾貢山脈 Mountain Targon,                   @瘟疫叢林 Plague Jungles,                   @盤蛇河 Serpentine River,                   @厄爾提斯坦 Urtistan,                   @巫毒之地 Voodoo Lands,                   @咆哮深淵 Howling Abyss,                   @熔岩洞窟 Magma Chambers,                   @召喚師峽穀 Summoner's Rift,                   @九尾妖狐: 阿狸(Ahri),                   @暗影之拳:阿卡麗(Akali),                   @牛頭酋長:阿利斯塔(Alistar),                   @殤之木乃伊:阿木木(Amumu),                   @冰晶鳳凰:艾尼維亞(Anivia),                   @黑暗之女:安妮(Annie),                   @寒冰射手:艾希(Ashe),                   @蒸汽機器人:布裡茨(Blitzcrank),                   @複仇焰魂:布蘭德(Brand),                   @皮城女警:凱特琳(Caitlyn),                   @魔蛇之擁:卡西奧佩婭(Cassiopeia),                   @虛空恐懼:科’加斯(ChoGath),                   @英勇投彈手:庫奇(Corki),                   @諾克薩斯之手:德萊厄斯(Darius),                   @皎月女神:黛安娜:(Diana),                   @祖安狂人:蒙多醫生(DrMundo),                   @榮耀行刑官:德萊文(Delevin),                   @蜘蛛女皇:伊莉斯(Elise),                   @寡婦製造者:伊芙琳(Evelynn),                   @探險家:伊澤瑞爾(Ezreal),                   @末日使者:費德提克(Fiddlesticks),                   @無雙劍姬:劍姬(Fiora),                   @潮汐海靈:菲茲(Fizz),                   @哨兵之殤:加裡奧(Galio),                   @海洋之災:普朗克(Gangplank),                   @德瑪西亞之力:蓋倫(Garen),                   @酒桶:古拉加斯(Gragas),                   @法外狂徒:格雷福斯(Graves),                   @戰爭之影:赫卡裡姆 (Hecarim),                   @大發明家:黑默丁格(Heimerdinger),                   @刀鋒意志:伊瑞利亞(Irelia),                   @風暴之怒:迦娜(Janna),                   @德瑪西亞皇子:嘉文四世(JarvanⅣ),                   @武器大師:賈克斯(Jax),                   @未來守護者:傑斯(Jayce),                   @天啟者:卡爾瑪(Karma),                   @死亡頌唱者:卡爾薩斯(Karthus),                   @虛空行者:卡薩丁(Kassadin),                   @不詳之刃:卡特琳娜(Katarina),                   @審判天使:凱爾(Kayle),                   @狂暴之心:凱南(Kennen),                   @虛空掠奪者:卡’茲克(Khazix),                   @深淵巨口:克格’莫(Kog Maw),                   @詭術妖姬:樂芙蘭(LeBlanc),                   @盲僧:李青(Lee sin),                   @曙光女神:蕾歐娜(Leona),                   @仙靈女巫:璐璐(lulu),                   @光輝女郎:拉克絲(Lux),                   @熔岩巨獸:墨菲特(Malphite),                   @虛空Crowdsourced Security Testing:瑪爾紮哈(Malzahar),                   @扭曲樹精:茂凱(Maokai),                   @無極劍聖:易(Yi),                   @賞金獵人:厄運小姐(MissFortune),                   @齊天大聖:孫悟空(Monkey king),                   @金屬大師:莫德凱撒(Mordekaiser),                   @墮天使:莫甘娜(Morgana),                   @喚潮鮫姬:娜美(Nami),                   @沙漠死神:內瑟斯(Nasus),                   @深海泰坦:諾提勒斯(Nautilus),                   @狂野女獵手:奈德麗(Nidalee),                   @永恒夢魘:魔騰(Nocturne),                   @雪人騎士:努努(Nunu),                   @狂戰士:奧拉夫(Olaf),                   @發條魔靈:奧莉安娜(Orianna),                   @戰爭之王:潘森(Pantheon),                   @鋼鐵大使:波比(Poopy),                   @披甲龍龜:拉莫斯(Rammus),                   @荒漠屠夫:雷克頓(Renekton),                   @傲之追獵者:雷恩加爾(Rengar),                   @放逐之刃:瑞文(Rivan),                   @機械公敵:蘭博(Rumble),                   @流浪法師:瑞茲(Ryze),                   @凜冬之怒:瑟莊妮:(Sejuani),                   @惡魔小丑:薩科(Shaco),                   @暮光之眼:慎(Shen),                   @龍血武姬:希瓦娜(Shyvana),                   @鍊金術士:辛吉德(Singed),                   @亡靈勇士:賽恩(Sion),                   @戰爭女神:希維爾(Sivir),                   @水晶先鋒:斯卡納(Skarner),                   @琴瑟仙女:娑娜(Sona),                   @眾星之子:索拉卡(Soraka),                   @策士統領:斯維因(Swain),                   @暗黑元首:辛德拉(Syndra),                   @刀鋒之影:泰隆(Talon),                   @寶石騎士:塔裡克(Taric),                   @迅捷斥候:提莫(Teemo),                   @魂鎖典獄長:錘石(Thresh),                   @麥林炮手:崔絲塔娜(Tristana),                   @詛咒巨魔:特蘭德爾(Trundle),                   @蠻族之王:泰達米爾(Tryndamere),                   @卡牌大師:崔斯特(Twisted Fate),                   @瘟疫之源:圖奇(Twitch),                   @野獸之靈:烏迪爾(Udyr),                   @首領之傲:厄加特(Urgot),                   @懲戒之箭:韋魯斯(Varus),                   @暗夜獵手:薇恩(Vayne),                   @邪惡小法師:維伽(Veigar),                   @皮城執法官:蔚(Vi),                   @機械先驅:維克托(Viktor),                   @猩紅收割者:弗拉基米爾(Vladimir),                   @雷霆咆哮:沃利貝爾(Volibear),                   @嗜血獵手:沃裡克(Warwick),                   @遠古巫靈:澤拉斯(Xerath),                   @德邦總管:趙信(XinZhao),                   @掘墓者:約裡克(Yorick),                   @影流之主:劫(Zed),                   @爆破鬼才:吉格斯(Ziggs),                   @時光守護者:基蘭(Zilean),                   @荊棘之興:婕拉(Zyra)].mutableCopy;}

 

#pragma mark 協議中的方法

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{        [self.searchResults removeAllObjects];    //NSPredicate 謂詞    NSPredicate *searchPredicate = [NSPredicate predicateWithFormat:@self contains[cd] %@,searchController.searchBar.text];    self.searchResults = [[self.items filteredArrayUsingPredicate:searchPredicate]mutableCopy];    //重新整理表格    [self.tableView reloadData];        }

#pragma mark - Table view data source

 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {        // Return the number of sections.    return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {        return (!self.searchController.active) ? self.items.count : self.searchResults.count;}

返回cell:

 

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kTableCell forIndexPath:indexPath];        if (cell == nil) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kTableCell];    }            if (indexPath.row > 0) {        cell.imageView.frame = CGRectMake(60, 60, 10, 10);        cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@%ld,indexPath.row + 43]];        cell.textLabel.font = [UIFont systemFontOfSize:15];    }    cell.textLabel.text = (!self.searchController.active) ? self.items[indexPath.row] : self.searchResults[indexPath.row];        return cell;}

業務代理返回高:

 

 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{    if (indexPath.row == 0) {        return 100  ;    }else{        return 80;    }}

最終效果:

 




 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.