我正在尝试从UITableView
选择到UITabBarController
中的特定选项卡。在进行谷歌搜索时,我发现两组信息似乎可以指示操作方法,但均未使用UITableView
作为源。
第一个来源是我在StackOverflow上找到的这个奇妙的答案:How to make a segue to second item of tab bar?
第二个来源是此站点:http://www.codingexplorer.com/segue-uitableviewcell-taps-swift/
我一直在尝试将两者结合用于我的应用程序。以下是我的原始UIViewController的截短版本(如果需要,我可以发布完整的版本,只是我认为大多数代码与该命令无关):
class BonusListViewController: UITableViewController {
// MARK: - Table View Configuration
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if isFiltering() {
print("Showing \(filteredBonuses.count) Filtered Results")
return filteredBonuses.count
}
print("Found \(bonuses.count) rows in section.")
return bonuses.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
let row = indexPath.row
}
private var nextViewNumber = Int()
@IBAction func secondView(_ sender: UITapGestureRecognizer) {
self.nextViewNumber = 2
self.performSegue(withIdentifier: "tabBar", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "tabBar" {
let destination = segue.destination as! TabBarViewController
switch (nextViewNumber) {
case 1:
destination.selectedIndex = 0
case 2:
destination.selectedIndex = 1
if self.isFiltering() {
destination.bonus = filteredBonuses[(tableView.indexPathForSelectedRow?.row)!]
} else {
destination.bonus = bonuses[(tableView.indexPathForSelectedRow?.row)!]
}
default:
break
}
}
}
}
我的问题解决了尝试将
tableView.indexPathForSelectedRow?.row
传递到UITabViewController
的问题。在上述代码段结尾附近的prepare(for segue)
中,我收到了destination.bonus =
行的编译错误,内容为:类型“TabBarViewController”的值没有成员“奖励”
从技术上讲这是正确的,因为我只是试图将TabBarViewController传递到它控制的第二个选项卡。
如何解决以上问题,让我点击一个单元格,然后将选定的行传递给目标
UITabView
?编辑:如果有帮助,这里是情节提要的图片。
最佳答案
类型“TabBarViewController”的值没有成员“奖励”
因为“TabBarViewController”没有名为Bonus的属性
您可以为TabBarViewController
子类添加属性bonus
并从segue像
guard let destination = segue.destination as? YourTabbarSubClass else {return }
您可以通过
bonus
访问destination.bonus
现在,当您需要标签栏控制器中的
bonus
时,可以将其与(self.tabbarController as! YourTabbarSubClass).bonus
一起使用编辑
class TabBarViewController: UITabBarController {
// Add property bonus here
var bouns:BounsStruct?
}
现在,从您需要的视图控制器中
class YourFirstTabVC:UIVIewController {
//where you need that
self.bouns = (self.tabbarController as! TabBarViewController).bouns
self.tableview.reloadData()
}