如何在iOS中使用UITextField自定義搜索框?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的伊犁網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
注:CSDN的代碼塊有點(diǎn)撈,如果瀏覽器窗口較窄,一行代碼占了兩行的位置,后面的代碼就看不到了,大家可以把瀏覽器窗口拉大一點(diǎn)
UI小姐姐設(shè)計(jì)的搜索框經(jīng)常是五花八門(mén),系統(tǒng)的搜索框經(jīng)常不能滿(mǎn)足我們的需求,需要我們特別定制一個(gè)。但是UITextField
的諸多回調(diào)里面,沒(méi)有一個(gè)是適合觸發(fā)搜索時(shí)間的。UITextFieldTextDidChangeNotification
調(diào)用過(guò)于頻繁,每輸入一個(gè)字符就調(diào)一次接口怕是不太合適。UITextFieldTextDidEndEditingNotification
只有在結(jié)束編輯的時(shí)候才會(huì)調(diào)一次,結(jié)束編輯就意味著鍵盤(pán)消失了,也不太合適。
這樣就難倒我們了嗎,當(dāng)然不是,辦法還是有滴。
解決方案
先自定義一個(gè)搜索框 改好樣式,然后監(jiān)聽(tīng)UITextFieldTextDidChangeNotification
- (void)textFieldDidChange{ if (self.searchDelegate && [self.searchDelegate respondsToSelector:@selector(customSearchBar:textDidChange:)]) { [self.searchDelegate customSearchBar:self textDidChange:self.text]; } }
使用
@property (nonatomic, strong) LGCustomSearchBar *searchBar; @property (nonatomic, assign) NSInteger inputCount; 記錄輸入次數(shù) - (void)viewDidLoad { [super viewDidLoad]; self.searchBar = [[LGCustomSearchBar alloc] initWithFrame:CGRectMake(20, 10, kScreenWidth-40, 36)]; self.searchBar.searchDelegate = self; [self.view addSubview:self.searchBar]; } - (void)customSearchBar:(LGCustomSearchBar *)searchBar textDidChange:(NSString *)searchText{ if (searchText.length == 0) { [self searchKeyword:@(self.inputCount)]; } else{ self.inputCount++; [self performSelector:@selector(searchKeyword:) withObject:@(self.inputCount) afterDelay:1.5f]; } } - (void)searchKeyword:(NSNumber *)inputCount{ // 判斷不等于0是為了防止用戶(hù)輸入完直接點(diǎn)擊搜索,延時(shí)結(jié)束之后又搜索一次 if (inputCount.integerValue == self.inputCount && self.inputCount != 0) { [self loadData]; } } - (BOOL)textFieldShouldReturn:(UITextField *)textField{ [self loadData]; return NO; } - (void)loadData{ self.inputCount = 0; // 本地查詢(xún) 或者 請(qǐng)求數(shù)據(jù) ... [self.tableView reloadData]; }
核心代碼
延遲1.5秒以后執(zhí)行搜索,判讀如果1.5秒之后傳入的輸入次數(shù)和現(xiàn)在的輸入次數(shù)一致,說(shuō)明用戶(hù)1.5秒已經(jīng)沒(méi)有輸入新內(nèi)容了,加在新數(shù)據(jù)。這個(gè)時(shí)間可以自己調(diào)整
[self performSelector:@selector(searchKeyword:) withObject:@(self.inputCount) afterDelay:1.5f];
看完上述內(nèi)容,你們掌握如何在iOS中使用UITextField自定義搜索框的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!