Скрытие UIView родительского представления от контроллера дочернего представления - PullRequest
0 голосов
/ 28 апреля 2018

Как выглядит мой экран

Иерархия контроллера основного / родительского вида

Иерархия контроллеров дочернего представления

Я хочу скрыть панель навигации и меню ползунка в моем родительском контроллере представления всякий раз, когда пользователь прокручивает вниз в моем дочернем контроллере представления.

В моем дочернем контроллере представления у меня есть «представление прокрутки -> представление -> представление текста».

В текстовом представлении у меня есть текст, который поступает из API при прокрутке пользователя вниз.

Красной подсветкой в ​​главном контроллере представления является вид контейнера, как видно на изображении.

Как скрыть панель навигации и меню ползунка в моем родительском контроллере представления всякий раз, когда пользователь прокручивает вниз в моем дочернем контроллере представления.

Можно ли встроить вид контейнера в UIScrollView?

Если у вас возникли какие-либо сомнения, пожалуйста, укажите в комментарии, я отвечу на это спасибо

1 Ответ

0 голосов
/ 28 апреля 2018

для панели навигации вы можете легко проверить свойство Hide 'On Swipe UINavigationController. Он автоматически скрывает панель навигации при пролистывании вверх и показывает ее при пролистывании вниз.

enter image description here

Но для слайдера это зависит от того, как вы это реализуете.
Вы можете установить SwipeGestureRecognizer для него и обработать скрытое свойство программно.

обновление
Вы можете использовать NSNotification для уведомления родителей от ребенка.
Для этого вы должны объявить это так:

class childViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeRight.direction = UISwipeGestureRecognizerDirection.right
        self.view.addGestureRecognizer(swipeRight)

        let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
        swipeDown.direction = UISwipeGestureRecognizerDirection.down
        self.view.addGestureRecognizer(swipeDown)
    }

    func respondToSwipeGesture(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case UISwipeGestureRecognizerDirection.right:
                print("Swiped right")
            case UISwipeGestureRecognizerDirection.down:
                NotificationCenter.default.post(name: .swipedDown, object: nil)
            case UISwipeGestureRecognizerDirection.left:
                print("Swiped left")
            case UISwipeGestureRecognizerDirection.up:
                NotificationCenter.default.post(name: .swipedUp, object: nil)
            default:
                break
            }
        }
    }

}

class ParentViewController: UIViewController {
    override func viewDidLoad(){
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(childScrolledUp(notification:)), name: .swipedUp, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(childScrolledDown(notification:)), name: .swipedDown, object: nil)
    }
override func viewWillDisappear(_ animated: Bool) {
    NotificationCenter.default.removeObserver(self, name: .swipedUp, object: nil)
    NotificationCenter.default.removeObserver(self, name: .swipedDown, object: nil)
}

    func childScrolledUp(notification: NSNotification) {
        //hide your slider menu
    }

    func childScrolledDown(notification: NSNotification) {
        //show your slider menu
    }
}


extension Notification.Name {
    static let swipedDown = Notification.Name("swipedDown")
    static let swipedUp = Notification.Name("swipedUp")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...