gpt4 book ai didi

ios - 我无法让选项卡栏委托(delegate)调用

转载 作者:行者123 更新时间:2023-11-30 12:35:34 25 4
gpt4 key购买 nike

我已经问过这个问题b4并且已经尝试了很长时间......

问题:我有 4 个选项卡,当选择第三个选项卡时,我想等到选项卡更改后,然后将信息发送到 Stringbuilder 等。但我似乎永远无法让它正确调用,我已经尝试过委派 GenreViewController 并尝试使用协议(protocol),但它从不调用...

请告诉我需要在标签栏功能中放入什么,因为我不知道应该放什么。我尝试将 tabbarcontroller 放在那里并选择 viewcontroller。我对这一切都很陌生,所以请不要严厉:(

TabBarController:

import UIKit
class TabBarViewController: UITabBarController{

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


func tabBar(_ tabBar: TabBarViewController, didSelect item: UITabBarItem) {
print("he")
//ask where it is first tab bar item
if self.tabBarController?.selectedIndex == 1 {
print("genres")

}

}

}

流派 View Controller :

import UIKit

class GenreViewController: UIViewController, UITableViewDelegate,UITableViewDataSource, UITabBarControllerDelegate {

@IBOutlet weak var genreSwitch: UISwitch!

@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
//self.tabBarController?.delegate = self
tableView.isScrollEnabled = false
let tabBarViewController = TabBarViewController()



}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


let genreArray = ["Action","Adventure","Comedy","Fantasy","Drama","Horror","Romance","Thriller","Family"]
let genreIds = [28,12,35,14,18,27,10749,53,10751]
//LATER!!: Save this Array until next time they log into the app
var activeGenreArray = [Int!](repeating: 0, count: 9)





//Number of rows
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return genreArray.count
}


//What to do with tableview
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! GenreCustomcell


cell.genreSwitch.isEnabled = true
cell.genreName.text = self.genreArray[indexPath.row]
cell.genreSwitch.setOn(false, animated: true)

cell.genreSwitch.addTarget(self, action: #selector(GenreViewController.switchChange(sender:)), for: UIControlEvents.valueChanged)
cell.genreSwitch.restorationIdentifier = "\(genreIds[indexPath.row])"
cell.genreSwitch.tag = indexPath.row


return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}

func switchChange(sender: UISwitch){

let id = Int(sender.restorationIdentifier!)
let row = Int(sender.tag)
print(row)

if sender.isOn == true{
activeGenreArray[row] = id!
print(activeGenreArray)
}
else{

activeGenreArray[row] = 0

print(activeGenreArray)
}

}




}


class GenreCustomcell: UITableViewCell{

@IBOutlet weak var genreName: UILabel!

@IBOutlet weak var genreSwitch: UISwitch!

}

最佳答案

我不清楚你在这里想做什么。您已将 GenreViewController 声明为 UITabBarControllerDelegate,但随后实现了 UITabBarControllerDelegate 方法 (tabBar:didSelect:)在 UITabBarControllerTabBarViewController 子类上。

我希望看到你有:

  1. 对某个 UITabBarController 的引用(更具体地说,可以是 TabBarViewController)
  2. 对某个UITabBarControllerDelegate的引用(这可能是一个GenreViewController,一个TabBarViewController,如果它应该是它自己的委托(delegate),或者其他一些对象完全)
  3. UITabBarController 实例的 delegate 属性设置为 UITabBarControllerDelegate 实例。

可能让您感到困惑的事情:

  • View Controller 可以存在(并与选项卡关联),但在需要之前不加载它的 View (即您正在切换到它的标签)。如果您将 GenreViewController 添加到标签栏 Controller 它的 viewDidLoad 方法直到标签栏才会被调用 Controller 第一次切换到该选项卡。如果你的GenreViewController 正在设置自己的标签栏 Controller viewDidLoad 中的委托(delegate)(例如 self.tabbarController?.delegate =
    self
    )当您预期的,因此不会收到所选选项卡中更改的通知直到被选择一次之后。
  • 不清楚 let tabBarViewController = 是什么
    TabBarViewController()
    行的目的是创建一个新的 TabBarViewController 这可能不是你已经拥有的在你的 window 里看到。创建类的新实例并不等同于引用同一类的某些现有实例。

关于ios - 我无法让选项卡栏委托(delegate)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915724/

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