Представить ViewController как всплывающее окно

У меня есть основной ViewController, в котором у меня есть tableView с настраиваемым tableViewCell, внутри которого я добавил несколько объектов просмотра и кнопку. Я хочу представить другой ViewController, когда я нажал кнопку в ячейке, а также мне нужно отправить (данные tableCell, где произошло событие щелчка) и получить (выбранное значение из pickerView и другой текст метки) из всплывающего ViewController, затем, наконец, Мне нужен способ (например, кнопка закрытия), чтобы закрыть его.

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

@IBAction func cellBtnClicked(_ sender: Any) {
    let foodItem:FoodItem?
    let indexPath : IndexPath
    if let button = sender as? UIButton {
        let cell = button.superview?.superview as! UITableViewCell
        indexPath = self.tableView.indexPath(for: cell)!
        let hotel =  hotels[indexPath.section]
        foodItem = hotel.menu[indexPath.row]

затем я загружаю эти данные ячейки в контроллер всплывающего окна и пытаюсь представить его как всплывающее окно

let popoverContent = self.storyboard?.instantiateViewController(withIdentifier:"ShowPopoverVC" ) as! MiniCartVC
        popoverContent.foodItem = foodItem
        popoverContent.modalPresentationStyle = UIModalPresentationStyle.popover

                if let popover = popoverContent.popoverPresentationController {

                    let viewForSource = sender as! UIView
                    popover.sourceView = viewForSource

                    // the position of the popover where it's showed
                    popover.sourceRect = viewForSource.bounds

                    // the size you want to display
                    popoverContent.preferredContentSize = CGSize(width: 200, height: 135)
                    popover.delegate = self
                }            

                self.present(popoverContent, animated: true, completion: nil)
    }

Но это не всплывающее окно, а не переход, расширяющий весь View. Также мне нужен способ отправки данных из всплывающего VC в MainVC после его отклонения.

Пожалуйста, дайте мне знать, есть ли способ реализовать это должным образом. Любой ресурс в качестве справочного материала тоже подойдет, спасибо.


person Sreekanth    schedule 03.01.2017    source источник
comment
Вот всплывающее руководство - ›youtube.com/watch?v=48UA06EwfrM. Вы также захотите использовать шаблон делегата для отправки данных из всплывающего окна родительскому контроллеру представления. useyourloaf.com/blog/quick-guide-to-swift-delegates   -  person Adrian    schedule 03.01.2017


Ответы (1)


Из вашего указанного кода:

popover.delegate = self

Вы установили для UIPopoverPresentationControllerDelegate значение self. Просто реализуйте необязательный метод и используйте эту реализацию

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
}
person soumil    schedule 04.01.2017
comment
У меня есть эта дополнительная функция. - person Sreekanth; 04.01.2017
comment
На самом деле твоя идея у меня сработала. Я изменил свой следующий код func adaptivePresentationStyleForPresentationController (контроллер: UIPresentationController) - ›UIModalPresentationStyle {return .none} 'на ----›' func adaptivePresentationStyle (для контроллера: UIPresentationController) - ›UIModalPresentationStyle. . - person Sreekanth; 04.01.2017
comment
пожалуйста, проголосуйте за это, если это было полезно. Это также будет полезно для других пользователей. Спасибо. - person soumil; 05.01.2017