Отключить одно настраиваемое всплывающее окно UIViewController и сразу представить другое настраиваемое всплывающее окно UIViewController -SWIFT - PullRequest
0 голосов
/ 28 августа 2018

У меня есть приложение с основным UIViewController. Когда я нажимаю кнопку («Сохранить»), у меня появляется собственное всплывающее окно (UIViewController). В этом всплывающем окне у меня есть еще одна кнопка, в результате чего, если я нажму ее, я хочу закрыть текущий контроллер всплывающих окон, а затем сразу же представить другой другой настраиваемый контроллер всплывающих окон. Я могу закрыть первое всплывающее окно, но затем получаю сообщение об ошибке (см. Ниже). Я использую протокол, чтобы заставить это работать, но я делаю ошибку где-то. Пожалуйста, кто-нибудь может посоветовать?

[! [Введите описание изображения здесь] [1]] [1]

class mainViewController: UIViewController, popUpDismissedDelegate{

  // CUSTOM PROTOCOL DELEGATE FUNCTION
  func popUpDimissed() {

    // SHOW ANOTHER POPUP TO CREATE CUSTOM HASHTAGS!
    let createTagVC = storyboard?.instantiateViewController(withIdentifier: "createTag") as! CreateHashTagPopUpViewController
    present(createTagVC, animated: true, completion: nil)
 }


 // SAVE PDF
 @IBAction func savePdf(_ sender: Any) {

    // SHOW CUSTOM SELECTION OH HASHTAGS TO ASSIGN PDF
    let popUpVC = storyboard?.instantiateViewController(withIdentifier: "hashtagpicker") as! CustomHashTagPopup
    popUpVC.delegate = self
    present(popUpVC, animated: true, completion: nil)
 }

}



protocol popUpDismissedDelegate {
   func popUpDimissed()
}

class CustomHashTagPopup: UIViewController, UITableViewDelegate, UITableViewDataSource{

  var delegate: popUpDismissedDelegate!

 // TAP ON CELLS
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if(indexPath == [0,0]){
        // OPTION TO CREATE A NEW HASHTAG
        self.dismiss(animated: true) {
            self.delegate.popUpDimissed()
        }

    }else{
        // DO NOTHING
        // TO SELECT A HASH TAG USE NEEDS TO PRESS ON THE CHECKBOX!
    }
}

}

ОШИБКА:

 Warning once only: Detected a case where constraints ambiguously 
 suggest a height of zero for a tableview cell's content view. We're 
 considering the collapse unintentional and using standard height 
 instead.
 popup - viewDidDisappear
 Could not cast value of type 'UIViewController' (0x10c1ec1f0) to 
 'zapdocuments.CreateHashTagPopUpViewController' (0x107cd0520).
 2018-08-28 18:18:48.196815+0100 zapdocuments[28989:4660894] Could not 
 cast value of type 'UIViewController' (0x10c1ec1f0) to 
 'zapdocuments.CreateHashTagPopUpViewController' (0x107cd0520).

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Переместите вашу презентацию createTagVC в следующий цикл цикла выполнения. Это должно гарантировать, что пользовательский интерфейс находится в правильном состоянии «не представлен».

DispatchQueue.main.async {
    present(createTagVC, animated: true, completion: nil)
}

Иногда некоторые вещи на самом деле не выполняются, пока не закончится runloop. Лучше всего начать заново в следующем.

0 голосов
/ 28 августа 2018

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

Вы должны использовать параметр completion метода dismiss и поместить туда свой обратный вызов делегата, чтобы гарантировать, что вы не попытаетесь ничего сделать, пока он полностью не отклонится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...