我问过这个问题b4并且已经试了很久......
问题:我有4个选项卡,当第三个选项卡被选中时我想等到选项卡被更改,然后将信息发送到Stringbuilder等。但我似乎永远无法让它正常调用,我试过委托genreViewController并尝试使用协议但它从不调用...
请告诉我我需要放入标签栏功能,因为我不知道应该在那里。我已经尝试将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")
}
}
}
GenreViewController:
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!
}
答案 0 :(得分:0)
我不清楚你在这里想做什么。您已将GenreViewController
宣布为UITabBarControllerDelegate
,但在UITabBarControllerDelegate
tabBar:didSelect:
子类TabBarViewController
上实施了UITabBarController
方法UITabBarController
}。
我希望你能看到:
TabBarViewController
的引用(可能更具体地说是UITabBarControllerDelegate
)GenreViewController
的引用(如果它应该是自己的委托,则可以是TabBarViewController
,UITabBarController
,或者完全是其他对象)delegate
实例的UITabBarControllerDelegate
属性设置为GenreViewController
个实例。可能让你困惑的事情:
viewDidLoad
添加到标签栏控制器
在标签栏之前不会调用它的GenreViewController
方法
控制器第一次切换到该选项卡。如果你的
viewDidLoad
正在设置自己的标签栏控制器
self.tabbarController?.delegate =
self
中的代理人(例如let tabBarViewController =
TabBarViewController()
)当您离开时,它可能不会成为标签栏控制器的代理人
预期,因此不会通知所选标签中的更改
直到它被选中一次。TabBarViewController
行的意图是什么,但这是创造一个
新的Public Function SplitSemiColon(s As String) As String
While Left(s, 1) = ";"
s = Mid(s, 2)
Wend
While Right(s, 1) = ";"
s = Left(s, Len(s) - 1)
Wend
SplitSemiColon = s
End Function
不是您可能已经存在的那个
在你的窗口看到。创建类的新实例并不等同于引用同一类的某个现有实例。