UITableView 在 segmentedControlChanged 上没有改变

Posted

技术标签:

【中文标题】UITableView 在 segmentedControlChanged 上没有改变【英文标题】:UITableView Not Changing on segmentedControlChanged 【发布时间】:2017-04-04 17:05:03 【问题描述】:

我正在使用 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

    

【问题讨论】:

【参考方案1】:

你为什么这样做:

_ = allProducts?.sorted(byKeyPath: "basedescription")

您忽略了结果,因此没有任何变化。 sorted 方法不更新发送者,它返回一个新的集合。

您需要更新allProducts,以便重新加载时表格视图会发生变化。

你可能想要(如果 Realm 支持的话):

allProducts?.sort(byKeyPath: "basedescription")

或:

allProducts = allProducts?.sorted(byKeyPath: "basedescription")

当然,您还需要更新其他案例。

【讨论】:

出于某种原因,我认为使用下划线会更新结果。我会这样尝试。 不,使用下划线是为了在编译器抱怨你忽略函数调用的返回值时让编译器安静下来。

以上是关于UITableView 在 segmentedControlChanged 上没有改变的主要内容,如果未能解决你的问题,请参考以下文章

使用 UITableView 在 UITableView 上自动滚动 UIImageView

如果 UITableView 在 UIScrollView 中,则无法在 UITableView 上执行滑动删除

如何在没有数组的 UITableView 中显示 UITableView Cell?

尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度

uitableview 自定义单元格在向下滚动 uitableview 时丢失其内容

我在学习iOS的UITableView,为啥UITableView的最后一块单元格只能显示一半? [关闭]