ios - 带有 tableview 的 popover Controller 在 swift 中

标签 ios swift uitableview swift3

我有一个带有条形按钮项的 TableView。当我单击条形按钮时,它会显示 PopOver 菜单。当我单击 Popover 菜单项时执行一些操作(例如具有特定项目的 tableview 数据) 我想使用 PopOver 菜单作为过滤器类型:

这是代码:

查看 Controller 代码

@IBAction func ButtonClick(_ sender: UIBarButtonItem) {
     self.performSegue(withIdentifier: "POP1", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier ==  "POP1"            
    {
        let dest = segue.destination

        if let pop =  dest.popoverPresentationController
        {                
            pop.delegate = self
        }
    }
}

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

 func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return fruits.count
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    let fruitName = fruits[indexPath.row]
    cell.textLabel?.text = fruitName

    return cell
}

PopOVER代码:

覆盖 func numberOfSections(in tableView: UITableView) -> Int {

    return 1

}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
           return data.count

}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "POP", for: indexPath)

    cell.textLabel?.text = data[indexPath.row]
    return cell
}


override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    var selectedItem = indexPath
    print (selectedItem.row)

}

enter image description here

当我在 Popover 菜单中单击一个时,它应该显示 View Controller TableView 上显示的以每个字母开头的单词数(A 中有 1 个,B 中有 2 个)。

最佳答案

您可以使用完成闭包或委托(delegate)方法来实现您的目标。这是一个有用的lib使用具有通用数据类型的完成闭包,您可以自由地获取/设置 TableView 数据源作为键值元组。

对于委托(delegate),你可以做如下事情:

protocol PopoverViewControllerDelegate: class {
    func didSelectData(_ result: String)
}

class PopoverViewController: UIViewController {
    weak var delegate: PopoverViewControllerDelegate?

    //...

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        dismiss(animated: true, completion: nil)
        let selectedItem = arrayData[indexPath.row]
        delegate?.didSelectData(selectedItem)
    }
}

然后在您当前的 View Controller 中:

class ViewController: UIViewController, PopoverViewControllerDelegate {

    // ...

    func didSelectData(_ result: String) {
        // Update fruits array
        tableView.reload()
    }
}

关于ios - 带有 tableview 的 popover Controller 在 swift 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45206652/

相关文章:

ios - 在 iOS 中使用 NSBlockOperation 和 NSOperationQueue 延迟图像下载

swift - 使用类型调用 swift 类的初始值设定项

json - 将复杂 JSON 中的每个值提取到 Swift 中的数组中

iphone - Storyboard和 uitableview 困境

ios - 如何在 Core Data 中添加和更新多对多关系?

ios - 找不到接受提供的参数的 "+"的重载

ios - 如何在任何尺寸设备上将 ScrollView 的内容大小设置为框架的最大宽度

ios - 自定义 uitableviewcell 标签隐藏/显示

ios - NSComparisonResult 选项

ios - Crittercism 报告 main.m 崩溃