2016-11-21 38 views
3

我遇到“拉取刷新”问题。我使用的是一个UITableViewUIViewController,该UIRefreshControl目标设定为低于在这里:​​目标选择器无法在Swift3上工作

public func refresh(sender: AnyObject) { 
     updateData() 
     refreshControl.endRefreshing() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     [...] 

     refreshControl.addTarget(self, action: Selector(("refresh:")), for: UIControlEvents.valueChanged) 
    } 

当我拉 - 有一种情况例外:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Income.MainVC refresh:]: unrecognized selector sent to instance 0x7faf1040a9e0 

回答

4

在斯威夫特3,第一个参数在默认情况下不再被忽略。在Swift 2中,你的刷新方法签名是refresh(_:),现在是refresh(sender:),所以Selector("refresh:")将不起作用。

我建议你为你的第一个参数添加一个下划线,所以它看起来像这样func refresh(_ sender: AnyObject)

我也建议你使用新的选择语法,这应该是这个样子#selector(refresh(_:))

如果使用新的选择语法(你应该)我想你也能保持的第一个参数,并把它看起来像这样#selector(refresh(sender:))

5

阅读几本教程。

在iOS10 UIRefreshControl添加到TableViews。

简单的代码,我在homeproject使用:

private let refreshControl = UIRefreshControl() 

    override func viewDidLoad() { 

     tableView.refreshControl = refreshControl 
     refreshControl.addTarget(self, action: #selector(ViewController.refreshData(sender:)), for: .valueChanged) 

     fetchFixtures() 

    } 

    func refreshData(sender: UIRefreshControl) { 
     fetchFixtures() 

     refreshControl.endRefreshing() 
    } 
+0

PERFECTO!非常感谢! – Jignesh

+0

@odvan刚刚花了两个小时,直到我遇到你的例子。谢谢@ –

相关问题