将ViewController呈现为popover

时间:2017-01-03 14:46:57

标签: ios swift uipopovercontroller popover presentviewcontroller

我有一个主ViewController,其中我有一个带有自定义tableViewCell的tableView,在其中我添加了一些视图对象和一个按钮。当我点击单元格中的按钮时,我想要呈现另一个ViewController,我还需要从弹出的ViewController发送(tableCell数据发生click事件)和Receive(selecterView和其他标签文本中的选定值),最后我需要一种方法(如关闭按钮)来关闭它。

我可以使用以下代码

发送单元格中发生单击事件的数据
@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)
    }

但是它并不是像popue那样,而是像segue一样扩展整个View.Also我需要一种方法在解雇它时将数据从popover VC发送到MainVC。

如果有任何方法可以正确实施,请告诉我。任何资源作为参考目的也很好,谢谢。

1 个答案:

答案 0 :(得分:1)

从您列出的代码:

popover.delegate = self

您已将UIPopoverPresentationControllerDelegate设置为self。 只需实现可选方法并使用此实现

func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        return .none
}