在 Swift 中从 Tableviewcell 中关闭 Popover ViewController

Bel*_*ots 2 iphone uipopovercontroller ios swift

在我的 iOS 8 应用程序中,我有一个自定义的 ViewController,我将其显示为 Popover。这个 ViewController 有一个委托,它获取并发送到父 ViewController,在弹出窗口中点击索引。问题是我不能在 selectRow 之后关闭这个 Popover。

这是代码:

这是我想显示弹出窗口时调用的方法。

 @IBAction func registerButtonAction(sender: UIButton) {
    popup = self.storyboard!.instantiateViewControllerWithIdentifier("PopupViewController") as? PopupViewController
    popup!.modalPresentationStyle = .Popover
    popup!.preferredContentSize = CGSizeMake(100, 120)
    let popoverMenuViewController = popup!.popoverPresentationController
    popoverMenuViewController?.permittedArrowDirections = .Up
    popoverMenuViewController?.delegate = self
    popoverMenuViewController?.sourceView = sender
    popoverMenuViewController?.sourceRect = CGRect(
        x: sender.frame.size.width/2,
        y: sender.frame.size.height/2,
        width: 1,
        height: 1)
    popup!.delegate = self

    presentViewController(
        popup!,
        animated: true,
        completion: nil)

}
Run Code Online (Sandbox Code Playgroud)

这是 PopupViewController 代码:

protocol PopupViewControllerDelegate
{
    func rowClickedAtIndex(var index : Int)
}

class PopupViewController: MainViewController {

    var delegate : PopupViewControllerDelegate?

    @IBOutlet weak var tableView: UITableView!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

extension PopupViewController:UITableViewDelegate{

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        var cell:PopupTableViewCell? = tableView.dequeueReusableCellWithIdentifier("PopupTableViewCell") as? PopupTableViewCell

        if cell == nil {
            cell = PopupTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "PopupTableViewCell")
        }

        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if (self.delegate != nil)
        {
            self.delegate!.rowClickedAtIndex(indexPath.row)
            self.dismissViewControllerAnimated(true, completion: nil)
        }

    }

    func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
        return 1
    }

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{
        return 2
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你。

Bel*_*ots 5

我自己解决的:

我检查了问题不是弹出窗口没有被解除,而是在不同的秒后被解除。

所以我把我的解雇电话放在主线程中,它工作得很好。这是代码:

extension WelcomeViewController: PopupViewControllerDelegate {
    func rowClickedAtIndex(index: Int) {
        dispatch_async(dispatch_get_main_queue(),{
            self.dismissViewControllerAnimated(true, completion: nil)
            println(index)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

我要感谢 Frankie,他帮助我找到了解决方案,消除了不应该出现的问题。