Отклонить модальный вид при нажатии в другом месте программно - PullRequest
0 голосов
/ 23 января 2019

Я создаю представление фильтра для своего приложения ios, и я не уверен, как скрыть свой контроллер всплывающих окон, когда я нажимаю за его пределы.Я хотел бы использовать RxSwift / реактивный стиль, если это возможно.

enter image description here

Я немного исследовал это и просто запутался в различных решениях:

  • UIGestureRecognizer
  • UIPopoverController
  • , переопределяющий метод touchesBegan

Кроме того, я не знал, стоит ли мне скрывать или представлятьконтроллер просмотра.Есть ли польза от представления / отклонения?

Это код, который я использовал для создания своего представления и отображения его при нажатии кнопки:

let filterView = UIView()

func initFilterView() {
    let filterNavBar = UINavigationBar()
    let filterNavItem = UINavigationItem()

    self.view.addSubview(self.filterView)
    self.filterView.addSubview(testButton)
    self.filterView.addSubview(filterNavBar)

    self.filterView.isHidden = true
    self.filterView.backgroundColor = .blue
    self.filterView.snp.makeConstraints { make in
        make.bottom.left.right.equalToSuperview()
        make.height.equalTo(300)
    }

    filterNavBar.snp.makeConstraints { make in
        make.height.equalTo(50)
        make.top.width.equalToSuperview()
    }

    let clearButton = UIBarButtonItem()
    let doneButton = UIBarButtonItem()

    clearButton.title = "Clear"
    doneButton.title = "Save"
    filterNavItem.leftBarButtonItem = clearButton
    filterNavItem.rightBarButtonItem = doneButton
    filterNavBar.items = [filterNavItem]
    testButton.backgroundColor = .red
    testButton.setTitle("test haha haha", for: .normal)
    testButton.snp.makeConstraints { make in
        make.centerX.centerY.equalToSuperview()
        make.height.width.equalTo(100)
    }
}
func initNavBar() {
    self.navigationItem.titleView = searchBar
    filterButton.title = "Filter"
    self.navigationItem.rightBarButtonItem = filterButton
}
filterButton.rx.tap.subscribe(onNext: { [unowned self] tap in
    self.filterView.isHidden = false
})

Я ожидаю, что код будет скрытвид, но я не уверен, как это сделать.

...