Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 分段控件上的UITableView未更改已更改_Ios_Swift_Uitableview_Uisegmentedcontrol - Fatal编程技术网

Ios 分段控件上的UITableView未更改已更改

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

我使用Realm将数据加载到UITableView中,并在导航中设置了UISegmentedControl作为标题;但是当触发segmentedControlChanged时,我的tableView中的任何内容都不会更改

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")