我有一个带有条形按钮项的 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)
}
当我在 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/