将UIScrollView Offset从Swift 4中的另一个viewController更改为top

时间:2017-11-07 08:30:02

标签: ios swift uiscrollview nsnotificationcenter swift4

我有mainViewController,里面有scrollView我有secondViewController当我想尝试时,我想将scrollView偏移更改为secondViewController的顶部与NSNotificationCenter给了我;

  

:无法识别的选择器发送到实例0x7ff83e024200'

我该如何解决? 我的代码如下。

mainViewController

       override func viewDidLoad() {
            super.viewDidLoad()

            NotificationCenter.default.addObserver(self, selector: "gotop:", name: NSNotification.Name(rawValue: "gotop"), object: nil)

    }

  func gotop(){
         scrollView.setContentOffset(CGPoint(x:0, y:0), animated: false)
    }

secondViewController

@IBAction func goButton (sender : UIButton){

        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "gotop"), object: nil)


    }

3 个答案:

答案 0 :(得分:2)

我在项目中使用了以下代码来添加通知:

NotificationCenter.default.addObserver(self, selector: #selector(YourViewController.gotop), name: NSNotification.Name(rawValue: "gotop"), object: nil)

尝试在您的方案中有效。

答案 1 :(得分:2)

检查你的addObserver代码,选择器应该具有以下签名

NotificationCenter.default.addObserver(self, selector: #selector(MainViewController.goTop(notification:)), name: Notification.Name("gotop"), object: nil)

收到通知的方法处理程序:

func goTop(notification: Notification){
   scrollView.setContentOffset(CGPoint(x:0, y:0), animated: false)
}

用于发布通知

NotificationCenter.default.post(name: Notification.Name("gotop"), object: nil)

删除拒绝通知

deinit {
  NotificationCenter.default.removeObserver((self, name: Notification.Name("gotop"), object: nil)
}

答案 2 :(得分:1)

你的“goTop”函数的定义是错误的:

而不是

func gotop(){
  //do your stuff
}

试试这个:

func gotop(notification : NSNotification){
   //do your stuff
}

让我知道这是否可以解决您的问题。