Ios 分段控件上的UITableView未更改已更改
我使用Realm将数据加载到UITableView中,并在导航中设置了UISegmentedControl作为标题;但是当触发segmentedControlChanged时,我的tableView中的任何内容都不会更改Ios 分段控件上的UITableView未更改已更改,ios,swift,uitableview,uisegmentedcontrol,Ios,Swift,Uitableview,Uisegmentedcontrol,我使用Realm将数据加载到UITableView中,并在导航中设置了UISegmentedControl作为标题;但是当触发segmentedControlChanged时,我的tableView中的任何内容都不会更改 var productViewSegmentedControl: UISegmentedControl? = nil let realm = try! Realm() var allProducts : Results<Product>? override fun
var productViewSegmentedControl: UISegmentedControl? = nil
let realm = try! Realm()
var allProducts : Results<Product>?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if allProducts == nil {
allProducts = realm.objects(Product.self).sorted(byKeyPath: "basedescription")
}
if productViewSegmentedControl == nil {
let segmentedControlItems = ["List", "Brands", "Categories"]
productViewSegmentedControl = UISegmentedControl(items: segmentedControlItems)
productViewSegmentedControl?.selectedSegmentIndex = 0
self.navigationItem.titleView = productViewSegmentedControl
productViewSegmentedControl?.addTarget(self, action: #selector(OrderFormViewController.segmentedControlChanged(_:)), for:.allEvents)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func segmentedControlChanged(_ segControl: UISegmentedControl){
switch segControl.selectedSegmentIndex{
case 0:
_ = allProducts?.sorted(byKeyPath: "basedescription")
tableView.reloadData()
case 1:
_ = allProducts?.sorted(byKeyPath: "itembrand")
tableView.reloadData()
case 2:
_ = allProducts?.sorted(byKeyPath: "itemtype")
tableView.reloadData()
default: break
}
}
var-productViewSegmentedControl:UISegmentedControl?=无
让我试试!领域()
var所有产品:结果?
覆盖函数视图将出现(uo动画:Bool){
超级。视图将显示(动画)
如果allProducts==nil{
allProducts=realm.objects(Product.self).sorted(按关键字路径:“basedescription”)
}
如果productViewSegmentedControl==nil{
让segmentedControlItems=[“列表”、“品牌”、“类别”]
productViewSegmentedControl=UISegmentedControl(项:segmentedControlItems)
productViewSegmentedControl?.selectedSegmentIndex=0
self.navigationItem.titleView=productViewSegmentedControl
productViewSegmentedControl?.addTarget(self,action:#选择器(OrderFormViewController.segmentedControlChanged(:)),for:.allEvents)
}
}
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
}
func segmentedControlChanged(segControl:UISegmentedControl){
开关segControl.selectedSegmentIndex{
案例0:
_=所有产品?已排序(按关键字路径:“基本描述”)
tableView.reloadData()
案例1:
_=所有产品?已排序(按关键字路径:“项目品牌”)
tableView.reloadData()
案例2:
_=所有产品?已排序(按键路径:“itemtype”)
tableView.reloadData()
默认值:中断
}
}
您为什么这样做:
_ = allProducts?.sorted(byKeyPath: "basedescription")
您正在忽略结果,因此没有任何更改。sorted
方法不会更新发送者,而是返回一个新集合
您需要更新allProducts
,以便在重新加载时更改表视图
您可能需要(如果Realm支持):
或:
当然,您还需要更新其他案例。出于某种原因,我认为使用下划线可以更新结果。不,下划线的使用是为了在编译器抱怨忽略函数调用的返回值时使编译器安静下来。
allProducts?.sort(byKeyPath: "basedescription")
allProducts = allProducts?.sorted(byKeyPath: "basedescription")