You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pythonista中ui.TableView.reload后单元格背景色重置问题求助

问题原因

你遇到的问题是因为每次更新table_view_one数据源时,创建了新的ui.ListDataSource实例,但这个新实例并没有关联你自定义的tableview_cell_for_row方法,而是使用了ListDataSource默认的单元格创建逻辑,导致样式重置为默认的白色背景。

解决方案

有两种可行的解决方式:

方式一:复用现有数据源,仅更新items

不需要创建新的ListDataSource,直接修改现有数据源的items属性,这样能保留已绑定的自定义单元格创建逻辑:

elif tableview == table_view_two:
    selected_item = tableview.data_source.items[row]
    t_v_o_d_s = get_data_source('table_view_one', selected_item)
    # 直接更新现有数据源的items,而非替换整个数据源
    table_view_one.data_source.items = t_v_o_d_s
    table_view_one.reload()
    table_view_two.selected_row = -1

方式二:给新数据源绑定自定义cell创建方法

如果必须创建新的ListDataSource,需要手动将你的tableview_cell_for_row方法绑定到新数据源的对应回调上:

elif tableview == table_view_two:
    selected_item = tableview.data_source.items[row]
    t_v_o_d_s = get_data_source('table_view_one', selected_item)
    data_source = ui.ListDataSource(t_v_o_d_s)
    # 绑定自定义的单元格创建方法
    data_source.tableview_cell_for_row = tableview_cell_for_row
    table_view_one.data_source = data_source
    table_view_one.reload()
    table_view_two.selected_row = -1

补充说明

ui.ListDataSource本质是实现了TableView数据源协议的类,它默认会生成带有默认样式的单元格。当你替换数据源实例时,原来的自定义回调不会自动传递给新实例,所以必须手动绑定或者复用原有实例来保留样式设置。

内容的提问来源于stack exchange,提问作者Mushy

火山引擎 最新活动