代码之家  ›  专栏  ›  技术社区  ›  Alexa289

如果视图控制器不可滚动,是否可以执行“拉入刷新”操作?

  •  0
  • Alexa289  · 技术社区  · 6 年前

    我有一个UIViewController viewDidLoad 我从服务器检索员工数据。但有时我们可能会遇到internet连接问题,不幸的是,下一步取决于此员工数据。因此,在切换到下一个视图控制器之前,我必须确保此员工数据不为零。

    发生连接问题时,此员工数据将为零。此时,我将指示用户执行“拉入刷新”。我曾尝试在视图控制器中实现pull-to-refresh,但由于UIViewController不可滚动,因此无法工作。

    我可以在UIViewController中实现拉入刷新吗?

    因为我认为,只需拉动刷新,然后按下“特殊按钮”就可以更轻松地获得emlpoyee数据,而“特殊按钮”似乎只会刷新。还是有更好/通用的方法来解决这个问题?

    TableViewController中的pull刷新是这样的,但是在UIViewController中呢

    class TableViewController: UITableViewController {
    
    
        var arrayNumber = [1,2,3,4]
        var refresher : UIRefreshControl! = nil
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            refresher = UIRefreshControl()
            refresher.attributedTitle = NSAttributedString(string: "please pull to refresh")
            refresher.addTarget(self, action: #selector(TableViewController.populateTableView), for: UIControlEvents.valueChanged)
    
    
            tableView.addSubview(refresher)
    
    
    
    
        }
    
    
    
        @objc func populateTableView() {
            for i in 1...100 {
                arrayNumber.append(i)
            }
    
            tableView.reloadData()
            refresher.endRefreshing() 
        }
    
    
    
    
        override func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
    
        override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return arrayNumber.count
        }
    
        override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "tabCell", for: indexPath)
    
    
            cell.textLabel?.text = String(arrayNumber[indexPath.row])
    
            return cell
    
        }
    
    
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   OverD    6 年前

    我在以前的一个项目中实现了类似的东西。不幸的是,UIRefresh控件只适用于UIScrollView固有的对象。

    但是说到这里,我刚刚创建了一个自定义视图,其中包含UIActivityView和(您想象中需要的任何其他内容)。然后在ViewController中,我们添加了一个滑动手势,该手势将显示自定义视图。

    还有一件事我想提一下,为了获得与UIRefreshControl相同的视觉效果,可以将自定义视图添加为viewControllers视图的子视图,并将y:值设置为-子视图高度。然后,当用户向下滑动时,可以为 view.transform = CGAffinetransform(translate: 0, customView.hieght) 这将导致主视图显示为随着用户的滑动而向下滚动,并显示自定义刷新控件。