1. 程式人生 > >利用UITextField自定義搜尋欄,實現中文輸入過程中字母的搜尋功能

利用UITextField自定義搜尋欄,實現中文輸入過程中字母的搜尋功能

當我們需要搜尋功能時,我們首先想到的肯定是searchBar(當然我還只是個新手),但當我們需要在中文輸入過程中搜索字母的時候時,searchBar就不好用了,只有當文字展示在searchBar上時,才會觸發textDidChange的代理方法。
這時可以用UITextField自定義搜尋欄,來實現我們的需求。
首先,先來實現searchBar成為第一響應者時搜尋圖示從中心移動到頭部的動畫:

self.searchBar.delegate = self;
    self.textField.delegate = self;
    self.textField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0
, 0, 20, 20)]; self.textField.leftViewMode = UITextFieldViewModeAlways; [self.textField addSubview:self.imageView];

然後再重寫imageView的get方法:

- (UIImageView *)imageView
{
    if (!_imageView) {
        _imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"search"]];
        _imageView.bounds = CGRectMake(0
, 0, 20, 20); _imageView.center = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, 15); } return _imageView; }

這樣我們textField的中心就會出現一個搜尋圖示了。
再在textField的代理方法中實現動畫:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [UIView animateWithDuration:0.2 animations:^{
        self
.imageView.center = CGPointMake(15, 15); } completion:^(BOOL finished) { }]; } - (void)textFieldDidEndEditing:(UITextField *)textField { if (textField.text.length == 0) { [UIView animateWithDuration:0.2 animations:^{ self.imageView.center = CGPointMake([[UIScreen mainScreen] bounds].size.width/2, 15); } completion:^(BOOL finished) { }]; } }

至此我們就完成了textField的動畫,然後我們只需要再獲取textField上的文字,再根據自己的需求實現就OK了。
我這裡用的RAC實現的文字變化時的響應:

[self.textField.rac_textSignal subscribeNext:^(NSString *text) {
        //這裡實現一些功能就OK了,比如我是改變label的text
        self.label.text = text;
    }];

這裡寫圖片描述

本部落格原創並僅作筆記,轉載請註明出處。