问题描述
我将 XLPagerTabStrip 用于细分
我想在两个段中显示一个 tableview 数据并排序,为此我使用下面的代码
SegmentViewController 代码:如果我添加 child_2.isSorted = false
然后错误
“UIViewController”类型的值没有成员“isSorted”
import UIKit
import xlpagertabstrip
class SegmentViewController: buttonbarPagerTabStripViewController {
@IBOutlet weak var testSeg: buttonbarView!
override func viewDidLoad() {
super.viewDidLoad()
// change selected bar color
// Sets the background colour of the pager strip and the pager strip item
settings.style.buttonbarBackgroundColor = .white
settings.style.buttonbarItemBackgroundColor = .yellow
// Sets the pager strip item font and font color
settings.style.buttonbarItemFont = UIFont(name: "Helvetica",size: 15.0)!
settings.style.buttonbarItemTitleColor = .gray
changeCurrentIndexProgressive = { [weak self] (oldCell: buttonbarViewCell?,newCell: buttonbarViewCell?,progresspercentage: CGFloat,changeCurrentIndex: Bool,animated: Bool) -> Void in
guard changeCurrentIndex == true else { return }
oldCell?.label.textColor = .gray
newCell?.label.textColor = .blue
}
// Do any additional setup after loading the view.
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.buttonbarView.frame = testSeg.frame
}
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let child_1 = UIStoryboard(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "SegTableViewController")
let child_2 = UIStoryboard(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "SegTableViewController")
child_2.isSorted = false
return [child_1,child_2]
}
}
SegTableViewController 代码:这里在两个部分中只显示 sortedArray
我需要在第一部分 sortedArray
和第二部分 namesArray
.. 如何做到这一点.. 任何人都可以建议我>
import UIKit
import xlpagertabstrip
class SegTableViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,IndicatorInfoProvider {
var sortedArray = [String]()
var isSorted = true
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
if isSorted{
return IndicatorInfo(title: "Sorted")
}else{
return IndicatorInfo(title: "normal")
}
}
@IBOutlet weak var tableView: UITableView!
var namesArray = ["afsdf","ddsfsdf","hjhgjh","trytryr","nvbmvnb","yuertyri","bmvmncb","jgfhk","ytuioi","sdfgsfdsh","mkhjgijik","gfuyru"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
sortedArray = namesArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
self.tableView.register(UITableViewCell.self,forCellReuseIdentifier: "cell")
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
if isSorted {
return sortedArray.count
}
else{
return namesArray.count
}
}
func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! UITableViewCell
if isSorted{
cell.textLabel?.text = sortedArray[indexPath.row]
}
else{
cell.textLabel?.text = namesArray[indexPath.row]
}
return cell
}
}
解决方法
你需要像这样投射你的视图控制器
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
let child_1 = UIStoryboard(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "SegTableViewController")
let child_2 = UIStoryboard(name: "Main",bundle: nil).instantiateViewController(withIdentifier: "SegTableViewController")
(child_2 as? SegTableViewController).isSorted = false
return [child_1,child_2]
}
此外,不需要用于显示数据的数组。像这样只使用一个数组 namesArray
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if isSorted {
namesArray = namesArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedDescending }
}
self.tableView.register(UITableViewCell.self,forCellReuseIdentifier: "cell")
}