iOS开发 - TableView 头视图实现下拉添加

简单使用TableView的头视图实现下拉添加
原理很简单,下拉时候增加头视图,输入完成后,移除
Untitled.gif
class TableViewController: UITableViewController,UITextFieldDelegate {
    
    
    var TestData = [String]()
    
    var textField: UITextField! {
        let textField = UITextField(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 64))
        textField.textAlignment = .Center
        textField.placeholder = "输入新的项目"
        textField.becomeFirstResponder()
        textField.delegate = self
        return textField
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.backgroundColor = UIColor(red: 245/255, green: 254/255, blue: 255/255, alpha: 1)
        let tapGestureRecongizer = UITapGestureRecognizer(target: self, action: #selector(TableViewController.hideTextField))
        tapGestureRecongizer.cancelsTouchesInView = false //点击继续传递到下层,防止Cell无法点击
        self.tableView.addGestureRecognizer(tapGestureRecongizer)
    }
    
    func hideTextField() {
        
        textField.resignFirstResponder()
        
        UIView.animateWithDuration(0.5, animations: {
            self.tableView.tableHeaderView = nil
        }) { (finished) in
            self.tableView.reloadData()
        }
    }
    
    //MARK: 原理 -> 下拉显示头视图 -> 输入完成 —> 收回键盘 -> 移除头视图
    override func scrollViewWillBeginDecelerating(scrollView: UIScrollView) {
        if scrollView.contentOffset.y < -88 {
            
            tableView.tableHeaderView = textField
            tableView.tableHeaderView?.alpha = 0
            
            UIView.animateWithDuration(1, animations: {
                self.tableView.tableHeaderView?.alpha = 1
                })
        }
    }
    
    // MARK: - TextField Delegate
    
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        
        TestData.append(textField.text!)
        hideTextField()
        return true
    }
    
    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return TestData.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(String(UITableViewCell), forIndexPath: indexPath)
        cell.textLabel?.text = TestData.reverse()[indexPath.row]
        
        return cell
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,223评论 4 61
  • 电影末端,男女主人公微笑示意,坐在旁边的朋友说,“这是相逢一笑泯恩仇”,我原本想笑,但始终没有笑出来,我说,“这是...
    当了个当阅读 4,005评论 2 3
  • 一缕光亮打扰了夜的安宁 片片云朵掠过天空 我的思绪在不停的跳跃着 月光下,修长的身影,雪白的连衣裙 是你的到来,还...
    天空飘着雪阅读 1,430评论 0 0
  • 我喜欢的天是 太阳还没完全升起 云被染成红色 天是灰茫茫的亮 路灯刚刚被熄灭 我喜欢的清晨是 屋顶红色的瓦片 滴着...
    迟皖阅读 1,937评论 0 1