zoukankan      html  css  js  c++  java
  • 进击的雨燕------------在导航上的UISearchController实现动画效果

       这个代码片段是我这周我从网上找了各种资料然后经过自己的修改终于弄好了导航的上下动画效果:

    step1:==>因为这个搜索要有动画效果,所以这个页面必须要有一个导航控制器:

    //1.自定义创建导航控制器

    这个页面我是从其他页面跳转过来的,跳转之前我自定义了一个导航控制器:

       let actionSearchTable=searchTable();

            let navVC = UINavigationController(rootViewController: actionSearchTable);

            navVC.navigationBar.barStyle = UIBarStyle.BlackTranslucent;

            self.presentViewController(navVC, animated: true, completion: nil);

    //2.点击搜索跳转到 searchTable.swift,这个页面我继承的是 UITableViewController,而不是UiViewController,一定要注意,不然每当点击一次搜索取消的时候table上面会多出一片空白,这个原理我还不是太明白,如果你们发现了其中的原理希望能指点一二。

    这个表格的数据源我引用的是一个txt文件。格式如下图:

    复制代码
    //
    //  searchResultTable.swift
    //  搜索框
    //
    //  Created by 卢洋 on 15/11/6.
    //  Copyright © 2015年 奈文摩尔. All rights reserved.
    //
    
    import UIKit
    
    class searchTable: UITableViewController,UISearchBarDelegate{
        lazy var dismissBtn: UIButton = { UIButton(frame: CGRectMake(0, 0, 24, 24)) }();//返回按钮
        
        var itemsString:[String]!
        var searcher:UISearchController!
        var searchBars:UISearchBar?
        
        struct SearchControllerRestorableState {
            var wasActive = false
            var wasFirstResponder = false
        }
        var restoredState = SearchControllerRestorableState();
        
        //初始化函数
        override func viewDidLoad() {
            super.viewDidLoad();
            self.title="查找商家";
            initView();
            
        }
        
        //初始化UI
        func initView(){
            dismissBtnPrepare();
            //创建Table
            self.tableView=UITableView(frame: CGRectMake(0, 80, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height));
            self.tableView.delegate=self;
            self.tableView.dataSource=self;
            self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cells")
            
            //1.读取表格数据
            let tablePath = NSBundle.mainBundle().pathForResource("states", ofType: "txt")!;
            let tableData=try! NSString(contentsOfFile: tablePath, encoding: NSUTF8StringEncoding);
            itemsString = tableData.componentsSeparatedByString("
    ") as [String];
            
            let src = searchResultTable(data: itemsString)
            searcher = UISearchController(searchResultsController: src)
            
            searcher.searchResultsUpdater = src;
            //获取焦点时有阴影效果
            searcher.dimsBackgroundDuringPresentation=true;
            //获取焦点导航向上移的动画效果
            searcher.hidesNavigationBarDuringPresentation=true;
            searchBars = searcher.searchBar
            tableView.tableHeaderView = searchBars
            searchBars?.delegate=self;
            searchBars?.placeholder="输入商家名称";
            //取消按钮颜色和文本框光标颜色
            searchBars?.tintColor=UIColor.blueWithTabbar();
            //搜索框背景颜色
            //searchBars?.barTintColor=UIColor.blackColor();
            searcher.searchBar.sizeToFit();
            self.tableView.reloadData();
         //背景充满导航 definesPresentationContext = true; } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) // Restore the searchController's active state. if restoredState.wasActive { searcher.active = restoredState.wasActive restoredState.wasActive = false if restoredState.wasFirstResponder { searcher.searchBar.becomeFirstResponder() restoredState.wasFirstResponder = false } } } override func viewDidDisappear(animated: Bool) { super.viewDidAppear(animated); //2.3将状态栏变为白色 UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent; } func searchBarSearchButtonClicked(searchBar: UISearchBar) { searchBar.resignFirstResponder() } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return itemsString.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cells", forIndexPath: indexPath) cell.textLabel!.text = itemsString[indexPath.row]; return cell } override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { //取消选中的样式 tableView.deselectRowAtIndexPath(indexPath, animated: true); //获取点击的行索引 if(indexPath.row == 0){ } } /** 返回按钮 */ func dismissBtnPrepare(){ dismissBtn.setImage(UIImage(named: "img.bundle/cancel"), forState: UIControlState.Normal) dismissBtn.addTarget(self, action: "dismissLogin", forControlEvents: UIControlEvents.TouchUpInside) self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: dismissBtn) } /** 释放当前页面 */ func dismissLogin(){ self.dismissViewControllerAnimated(true, completion: nil) } func searchBarCancelButtonClicked(searchBar: UISearchBar) { print("b"); //2.3将状态栏变为白色 UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent; } //搜索框开始编辑事件 func searchBarTextDidBeginEditing(searchBar: UISearchBar) { //2.3将状态栏变为白色 UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default; } func searchBarTextDidEndEditing(searchBar: UISearchBar) { //2.3将状态栏变为白色 UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent; } }
    复制代码

    //3.搜索结果页面  searchResultTable.swift

    复制代码
    //
    //  searchResultTable2.swift
    //  searchBarDemo
    //
    //  Created by 卢洋 on 15/11/6.
    //  Copyright © 2015年 奈文摩尔. All rights reserved.
    //
    
    import Foundation
    import UIKit
    class searchResultTable:UITableViewController,UISearchResultsUpdating{
        var tableData:UITableView!;
        var originalData:[String]!                  //原数据
        var filteredData:[String]!                  //过滤数据
        
        override func viewDidLoad() {
            super.viewDidLoad();
            self.title="输入商家名称";
            initView()
        }
        init(data:[String]){
            originalData = data
            super.init(nibName: nil, bundle: nil)
            
        }
        
        required init?(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        //初始化UI
        func initView(){
    
            //创建Table
            tableData=UITableView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height));
            self.view.addSubview(tableData);
            //tableData.backgroundColor=UIColor.redColor();
            tableData.delegate=self;
            tableData.dataSource=self;
            tableData.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cells")
            
        }
        
         override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            // #warning Incomplete implementation, return the number of rows
            return filteredData.count
        }
    
         override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("cells", forIndexPath: indexPath)
            
            cell.textLabel!.text = originalData[indexPath.row];
            
            return cell
        }
    
        func updateSearchResultsForSearchController(searchController: UISearchController) {
            let searchBar=searchController.searchBar;
            let target=searchBar.text;
            filteredData = originalData.filter()
                {
                    
                    s in
                    var options = NSStringCompareOptions.CaseInsensitiveSearch
                    if searchController.searchBar.selectedScopeButtonIndex == 0
                    {
                        options = options.union(.AnchoredSearch)
                    }
                    let found = s.rangeOfString(target!, options: options)
                    
                    return (found != nil)
            }
            tableData.reloadData()
            
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning();
        }
    
    }
    复制代码

    好最后效果图如下:但是其中的字符串过滤有一点点问题,解决了一定要告诉我。。

    作者:来碗杂酱面 出处:http://www.cnblogs.com/brance/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 遇到了任何问题可以联系我邮箱:292692700@qq.com(QQ也是这个 去掉后缀即可)
  • 相关阅读:
    超贴心的,手把手教你写爬虫
    人生苦短我用Python,本文助你快速入门
    RocketMQ 安装
    RocketMQ 简介
    2020年工作上的最大收获——监控告警体系
    .NET Core开源任务调度平台ScheduleMaster上新了
    从源码角度分析ScheduleMaster的节点管理流程
    使用 K8s 进行作业调度实战分享
    图解 K8s 核心概念和术语
    深度剖析 Kafka Producer 的缓冲池机制【图解 + 源码分析】
  • 原文地址:https://www.cnblogs.com/sharkHZ/p/4983990.html
Copyright © 2011-2022 走看看