Измените UIScrollView Offset на top от другого viewController в Swift 4
Я имею 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 ответа
Решение
Проверьте ваш код 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)
}
Я использовал приведенный ниже код в своем проекте, чтобы добавить уведомление:
NotificationCenter.default.addObserver(self, selector: #selector(YourViewController.gotop), name: NSNotification.Name(rawValue: "gotop"), object: nil)
Попробуйте, если это работает в вашем сценарии.
Неверно определение вашего "goTop":
вместо
func gotop(){
//do your stuff
}
попробуй это:
func gotop(notification : NSNotification){
//do your stuff
}
дайте мне знать, если это решит вашу проблему.