gpt4 book ai didi

ios - 在 Swift 中从 Tableviewcell 中关闭 Popover ViewController

转载 作者:可可西里 更新时间:2023-11-01 00:23:56 27 4
gpt4 key购买 nike

在我的 iOS 8 应用程序中,我有一个自定义的 ViewController,我将其显示为 Popover。这个 ViewController 有一个委托(delegate),它获取并发送给父 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)

}

这是 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
}
}

谢谢。

最佳答案

我自己解决的:

我检查过问题不是弹出窗口没有被关闭,而是在不同的秒后被关闭。

所以我将我的关闭调用放在主线程中,它运行良好。这是代码:

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

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

关于ios - 在 Swift 中从 Tableviewcell 中关闭 Popover ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com