在swift中使用tableview的popover控制器

时间:2017-07-20 06:19:27

标签: ios swift uitableview swift3

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

这是代码:

查看控制器代码

@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(在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菜单中单击一个时,它应该显示在视图控制器表视图上显示的每个字母开头的单词计数(A中1个,B中2个)。

1 个答案:

答案 0 :(得分:1)

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

对于委托,您可以执行以下操作:

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)
    }
}

然后在当前视图控制器中:

class ViewController: UIViewController, PopoverViewControllerDelegate {

    // ...

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