zoukankan      html  css  js  c++  java
  • UIKit应用

    在前面, 我们讲解了很多 UIKit 的控件知识, 现在让我们来简单的应用一下, 看看我们是怎么去使用这些 UIKit 进行 App 的开发, 废话少说, 让我们直接来进入主题~


    1.搭建页面

    1

    我这里是使用了一个 VIewController 作为控制器, 然后把 ViewController 交给了 UINavigationController 管理, 关于怎么快速交给 UINavigationController 管理, 在之前的文章我演示过, 在这次再做一次.

    2


    2.实现代码

    遵守代理协议, 数据源协议

    class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchResultsUpdating {
    }

    设置数据, 实例化UISearchController

        var tableData = ["guangdong", "guangxi", "guangnan", "guangbei", "shanghai", "xiahai", "hunan", "hubei", "hudong", "huxi"]
        var filteredData:[String] = []
        var resultSearchController = UISearchController()

    实现UITableView的代理方法以及数据源方法

        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if resultSearchController.active {
                return filteredData.count
            } else  {
                return tableData.count
            }
        }
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath) as! UITableViewCell
    
            if resultSearchController.active {
                cell.textLabel?.text = filteredData[indexPath.row]
            } else {
                cell.textLabel?.text = tableData[indexPath.row]
            }
    
            return cell
        }

    实现UISearchController的搜索更新方法

        // 当 UISearchController 变成第一响应者的时候调用
        func updateSearchResultsForSearchController(searchController: UISearchController) {
            // 删除 filteredData 里的所有元素, 并且默认的保存为 false
            filteredData.removeAll(keepCapacity: false)
    
            // 输入筛选文本, 获取之后会自动去内存中搜索关键字, SELF CONTAINS[c] 这句话是匹配规则的写法, 直接照抄就可以了
            let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
    
            // 从 tableData 中筛选输入的关键字
            let array = (tableData as NSArray).filteredArrayUsingPredicate(searchPredicate)
    
            // 再把筛选出来的关键字加入到filtereData
            filteredData = array as! [String]
    
            // 刷新TableView
            self.myTableView.reloadData()
        }

    设置UISearchController

        func serachController() -> UISearchController{
            // 实例化 UISearchController, 并且设置搜索控制器为 nil
            let controller = UISearchController(searchResultsController: nil)
    
            // 设置更新搜索结果的对象为 self
            controller.searchResultsUpdater = self
    
            // 设置 UISearchController 是否在编辑的时候隐藏NavigationBar, 默认为 true
            controller.hidesNavigationBarDuringPresentation = false
    
            // 设置 UISearchController 是否在编辑的时候隐藏背景色, 默认为 true
            controller.dimsBackgroundDuringPresentation = false
    
            // 设置  UISearchController 搜索栏的 UISearchBarStyle 为Prominent
            controller.searchBar.searchBarStyle = UISearchBarStyle.Prominent
    
            // 设置 UISearchController 搜索栏的 Size 是自适应
            controller.searchBar.sizeToFit()
    
            // UISearchController可以设置在三个地方
            // 1.设置 navigationItem 的 titleView 为 UISearchController
            self.navigationItem.titleView = controller.searchBar
    
            // 2.设置 TableView 的 tableHeaderView 为controller.searchBar
            // self.myTableView.tableHeaderView = controller.searchBar
    
            // 3.设置 TableView 的偏移量, 使 UISearchController 默认就隐藏在 NavigationBar 下
                // self.myTableView.contentOffset = CGPointMake(0, CGRectGetHeight(controller.searchBar.frame))
            // 以上三种方法任选一种即可, 这里默认的是第一种
    
            // 返回设置好的 UISearchController
            return controller
            }

    最后在viewDidLoad 中实现所有方法

        override func viewDidLoad() {
            super.viewDidLoad()
    
            myTableView.delegate = self
            myTableView.dataSource = self
    
            resultSearchController = serachController()
        }

    3.最终效果图

    第一种
    1

    第二种
    2

    第三种
    3


    好了, 这次就讲到这里, 下次我们继续~~

  • 相关阅读:
    Java面试基础 -- Git篇
    Java面试基础
    如何避免死锁?
    如何减少上下文切换?
    Java中的volatile变量有什么作用?
    Thread类中start()方法喝run()方法有什么不同?
    (一)java异常处理的几个问题
    SUSE CaaS Platform 4
    SUSE CaaS Platform 4
    SUSE Ceph 增加节点、减少节点、 删除OSD磁盘等操作
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4529328.html
Copyright © 2011-2022 走看看