• 搜索栏UISearchBar的使用


    本文结构:

    1、首先是对UISearchBar的简介文字

    2、初始化展现UISearchBar,并解析它的结构

    3、属性、方法、代理等的一一介绍

    4、日常的使用,包括单独对UISearchBar的配置、与其他控件的配合使用


    一、UISearchBar的简介

    • UISearchBar : UIView <UIBarPositioning, UITextInputTraits>
    • 涉及到UITextField、UILabel、UIButton、UIColor
    • UISearchBarDelegate <UIBarPositioningDelegate>

    二、初始化展示UISearchBar,并解析它的结构

    三、各种属性、方法、代理的介绍

    1、UISearchBarDelegate的介绍(文本改变Delegate、按钮点击Delegate、范围点击Delegate)

    文本改变Delegate:

    /**
     询问代理是否开始搜索栏的编辑
     @param searchBar 正在编辑的搜索栏
     @return 如果返回YES则启动编辑会话。返回NO,则不启动编辑会话
     */
    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
        NSLog(@"询问代理是否开始搜索栏的编辑");
        return YES;
    }
    /** 询问代理是否应该在指定的搜索栏中停止编辑 @param searchBar 正在编辑的搜索栏 @return 如果返回YES则停止编辑,否则NO */ - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar { NSLog(@"询问代理是否应该在指定的搜索栏中停止编辑"); return NO; }
    /** 当用户开始编辑时 @param searchBar 正在编辑的搜索栏 */ - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { NSLog(@"当用户开始编辑时"); }
    /** 当用户更改了搜索文字 @param searchBar 正在编辑的搜索栏 @param searchText 搜索栏中的当前文本 @waring 当清楚搜索栏中的文字时,也会调用此方法 */ - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { NSLog(@"当用户更改了搜索文字"); }
    /** 询问代理是否将指定范围内的文本替换为用户输入的文本 @param searchBar 正在编辑的搜索栏 @param range 要更改的文本范围 @param text 用于替换现有文本的文本 @return 如果返回YES,则替换。返回NO,则不替换 */ - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSLog(@"询问代理是否将制定范围内的文本替换为给定的文本"); return YES; }
    /** 当用户已经编辑完搜索栏的文本 @param searchBar 正在编辑的搜索栏 @提示 通常可以在这个方法中执行基于搜索栏中文本的搜索 */ - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { NSLog(@"当用户已经编辑完搜索栏的文本"); }

    按钮点击Delegate:

    /**
     通知代理搜索栏书签按钮被用户点击
     @param searchBar 被点击的搜索栏
     @提示 搜索栏不会自动执行搜索栏的激活
     */
    - (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar {
        NSLog(@"通知代理搜索栏书签按钮被用户点击");
    }
    
    /**
     通知代理用户点击了搜索栏的取消按钮
     @param searchBar 被点击的搜索栏
     @提示 可以用在此方法中关闭搜索栏
     */
    - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
        NSLog(@"通知代理用户点击了搜索栏的取消按钮");
    }
    
    /**
     通知代理用户点击了搜索按钮
     @param searchBar 被点击的搜索栏
     @提示 应该在这个方法中开始搜索操作
     */
    - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
        NSLog(@"通知代理用户点击了搜索按钮");
    }
    
    /**
     通知代理用户点击了搜索结果列表按钮
     @param searchBar 被点击的搜索栏
     */
    - (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar {
        NSLog(@"通知代理用户点击了搜索结果列表按钮");
    }

    范围点击Delegate:

    /**
     通知代理范围按钮的选择已经发生更改
     @param searchBar 被点击的搜索栏
     @param selectedScope 所选范围按钮的索引
     */
    - (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
        NSLog(@"通知代理范围按钮的选择已经发生更改");
    }

    2、初始化UISearchBar

    - (instancetype)init;
    - (instancetype)initWithCoder:(NSCoder *)aDecoder;
    - (instancetype)initWithFrame:(CGRect)frame;

    3、处理UISearchBar的交互

    @property(nonatomic, weak) id<UISearchBarDelegate> delegate;

    4、UISearchBar的文本内容

    // 搜索栏中占位符文本,默认为nil
    @property(nonatomic, copy) NSString *placeholder;
    
    // 显示在搜索栏顶部的一行文本,默认为nil
    @property(nonatomic, copy) NSString *prompt;
    
    // 搜索栏中的文本,默认为nil
    @property(nonatomic, copy) NSString *text;

    5、UISearchBar的外表属性

    // 搜索栏外观的小节样式。这个属性可以和UISearchBarStyle一起使用
    // UIBarStyleDefault = 0 默认值。使用通常与给定视图相关联的默认样式。例如,导航栏通常使用黑色内容的白色背景
    // UIBarStyleBlack = 1 使用带浅色内容的黑色背景
    // UIBarStyleBlackOpaque = 1 已过时。改用UIBarStyleBlack
    // UIBarStyleBlackTranslucent = 2 已过时。改为设置translucent属性为YES来替代
    @property(nonatomic) UIBarStyle barStyle;
    
    // 搜索栏的背景颜色。如果你将translucent设置为NO,该属性将不起作用
    @property(nonatomic, strong) UIColor *barTintColor;
    
    // 设置搜索栏外观的搜索栏样式
    @property(nonatomic) UISearchBarStyle searchBarStyle;
    
    // 该颜色将用于搜索栏中的关键元素
    @property(nonatomic, strong) UIColor *tintColor;
    
    // 设置搜索栏是否半透明。默认为YES(半透明)
    @property(nonatomic, assign, getter=isTranslucent) BOOL translucent;

    6、自定义键盘的快捷键项目

    // 该属性用于iPad上,在iPhone和iPod上不可用
    @property(nonatomic, readonly, strong) UITextInputAssistantItem *inputAssistantItem;

    7、按钮的配置

    // 是否显示书签按钮,默认为NO
    @property(nonatomic) BOOL showsBookmarkButton;
    
    // 是否显示取消按钮,默认值是NO。该属性不适用iPad
    @property(nonatomic) BOOL showsCancelButton;
    
    // 使用动画效果显示或隐藏取消按钮
    - (void)setShowsCancelButton:(BOOL)showsCancelButton 
                        animated:(BOOL)animated;
    
    // 是否显示搜索结果按钮,默认为NO
    @property(nonatomic) BOOL showsSearchResultsButton;
    
    // 表明搜索结果按钮是否处于被选中状态,默认为NO
    @property(nonatomic, getter=isSearchResultsButtonSelected) BOOL searchResultsButtonSelected;

    8、范围按钮

    // 范围按钮上标题的数组,从左到右显示
    @property(nonatomic, copy) NSArray<NSString *> *scopeButtonTitles;
    
    // 当前所选择的范围按钮的索引
    @property(nonatomic) NSInteger selectedScopeButtonIndex;
    
    // 是否显示范围栏
    @property(nonatomic) BOOL showsScopeBar;

    9、设置UISearchBar的外观

    // 搜索栏的背景图片
    @property(nonatomic, strong) UIImage *backgroundImage;
    
    // 根据要求返回背景图片,默认为nil
    - (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition 
                                    barMetrics:(UIBarMetrics)barMetrics;
    
    // 设置背景图片
    - (void)setBackgroundImage:(UIImage *)backgroundImage 
                forBarPosition:(UIBarPosition)barPosition 
                    barMetrics:(UIBarMetrics)barMetrics;
    
    // 返回给定状态、给定图标表示符常量下的图像
    - (UIImage *)imageForSearchBarIcon:(UISearchBarIcon)icon 
                                 state:(UIControlState)state;
    
    // 设置指定的状态、指定的图片表示符常量下的图片
    - (void)setImage:(UIImage *)iconImage 
    forSearchBarIcon:(UISearchBarIcon)icon 
               state:(UIControlState)state;
    
    // 返回指定图标的位置偏移量
    - (UIOffset)positionAdjustmentForSearchBarIcon:(UISearchBarIcon)icon;
    
    // 设置指定图标的位置偏移量
    - (void)setPositionAdjustment:(UIOffset)adjustment 
                 forSearchBarIcon:(UISearchBarIcon)icon;
    
    // 搜索栏的输入附件视图
    @property(nonatomic, readwrite, strong) UIView *inputAccessoryView;
    
    // 范围栏的背景颜色
    @property(nonatomic, strong) UIImage *scopeBarBackgroundImage;
    
    // 返回指定状态下的范围栏的背景图片
    - (UIImage *)scopeBarButtonBackgroundImageForState:(UIControlState)state;
    
    // 设置指定状态下的范围栏的背景图片
    - (void)setScopeBarButtonBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state;
    
    // 获取范围栏中左右段状态的图片
    - (UIImage *)scopeBarButtonDividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState;
    
    // 设置范围栏中左右段状态的图片
    - (void)setScopeBarButtonDividerImage:(UIImage *)dividerImage 
                      forLeftSegmentState:(UIControlState)leftState 
                        rightSegmentState:(UIControlState)rightState;
    
    // 返回给定状态下的搜索栏按钮标题字符串的文本属性
    - (NSDictionary<NSString *,id> *)scopeBarButtonTitleTextAttributesForState:(UIControlState)state;
    
    // 设置给定状态下的搜索栏按钮标题字符串的文本属性
    - (void)setScopeBarButtonTitleTextAttributes:(NSDictionary<NSString *,id> *)attributes forState:(UIControlState)state;
    
    // 返回给定状态的搜索文本字段图像
    - (UIImage *)searchFieldBackgroundImageForState:(UIControlState)state;
    
    // 设置给定状态的搜索文本字段图像
    - (void)setSearchFieldBackgroundImage:(UIImage *)backgroundImage 
                                 forState:(UIControlState)state;
    
    // 搜索栏中搜索文文字字段背景的偏移量
    @property(nonatomic) UIOffset searchFieldBackgroundPositionAdjustment;
    
    // 搜索栏中文字段背景中文本的偏移量
    @property(nonatomic) UIOffset searchTextPositionAdjustment;

    10、涉及到的常量

    typedef NS_ENUM(NSInteger, UISearchBarIcon) {
        UISearchBarIconSearch, // 搜索标示图片
        UISearchBarIconClear, // 清楚标示图标
        UISearchBarIconBookmark, // 书签标示图标
        UISearchBarIconResultsList, // 结果标示图标
    };
    typedef NS_ENUM(NSUInteger, UISearchBarStyle) {
        UISearchBarStyleDefault,    // 搜索栏具有默认样式
        UISearchBarStyleProminent,  // 搜索栏具有半透明背景,搜索栏不透明
        UISearchBarStyleMinimal     // 搜索栏没有背景,并且搜索栏半透明
    };
    typedef NS_ENUM(NSInteger, UIBarStyle) {
        UIBarStyleDefault          = 0, // 默认值。使用通常与给定视图相关联的默认样式。例如,导航栏通常使用黑色内容的白色背景
        UIBarStyleBlack            = 1, // 使用带浅色内容的黑色背景
        UIBarStyleBlackOpaque      = 1, // 已过时。改用UIBarStyleBlack
        UIBarStyleBlackTranslucent = 2, // 已过时。改为设置translucent属性为YES来替代
    };
    typedef struct UIOffset {
        CGFloat horizontal, vertical;
    } UIOffset;

    四、日常使用配置

  • 相关阅读:
    logback.xml
    logback:RollingFileAppender
    logback :<include>
    logback:参数化日志打印
    logback:fileAppender输出到文件
    logback:root和logger
    logback console控制台输出
    logback encoder详细设置
    logback关闭日志
    IDEA+testng,输出没有test-output目录
  • 原文地址:https://www.cnblogs.com/cchHers/p/9083651.html
Copyright © 2020-2023  润新知