我有一个uitable和一个函数,一旦用户点击其各自的行,就会返回该项的id。 id也是一个全局变量,因为它用于各种函数。 我的想法是创建一个数组,其中包含所有用户选择的项目,在点击保存播放列表时终止。防爆。如果用户连续选择id为5,7,9的项目,然后点击“保存播放列表”按钮,我希望数组保持
5 7 9
我认为最好的方法是使用while循环。 while循环应检查是否已单击“保存”按钮。我有一个全局变量,一旦程序进入“保存播放列表”按钮回调函数就会改变。
问题在于,一旦用户选择了ID,该数组将继续迭代,直到用户选择另一个ID,并继续迭代等等,直到单击保存按钮。例如:用户点击ID 5,阵列将记录55555555555555 ...重复出现,直到用户点击ex。 ID 7:555555555555557777777777,因为程序在不停顿的情况下继续循环和循环。
代码如下所示:
while (keeprunning)
idvec = [idvec id];
end
keeprunning是一个全局变量,在open函数中初始化为1。它在“保存播放列表”回调函数中更改为0。
我想通过引入一个新的全局变量来解决这个问题,将其称为'itemselected',在开启函数中初始化为1,并在每次调用单元格选择回调时再次更改为1。在while循环中将ID添加到数组后,此变量将重置为0.
这个想法是循环应该迭代而不点击'保存播放列表'按钮(由keeprunning全局变量控制)但是程序不应该让while循环迭代直到用户点击另一行,即直到单元格选择回叫功能再次被调用。
我需要这样的东西,但这不起作用(无限循环)。或者其他一些建议??
while (keeprunning || trackselected)
idvec = [idvec id];
trackselected = 0;
end
提前谢谢
答案 0 :(得分:0)
要记录用户在uitable中选择字段的历史记录,请执行以下操作:
function tbl_example
% Create the figure
fh = figure('Visible', 'off')
ud.selected_list = [];
d = gallery('integerdata',100,[10 3],0);
t = uitable(fh,'Data',d,'ColumnWidth',{50}, 'cellselectioncallback', @cell_history );
set( fh, 'visible', 'on' );
set( fh, 'userdata', ud );
return
function cell_history( h, event_data )
fh = get( h, 'Parent' )
ud = get( fh, 'userdata' );
indx = event_data.Indices;
ud.selected_list = [ ud.selected_list h.Data( indx(1), indx(2) ) ]
set( fh, 'userdata', ud );
return
然后,当您点击“播放列表”按钮时,只需阅读父图句柄中的userdata字段。
答案 1 :(得分:0)
我在停止思考并做其他事情后解决了这个问题;令人着迷的是,它是一种非常简单的方法。
我所做的是在CellSelectionCallback中创建一个全局数组。程序通过在“创建播放列表”中使用布尔变量来检查程序是否已启动以创建播放列表。按钮回调,在这种情况下,全局数组附加了所选行的项ID。由于阵列是全局的,因此可以在不同的功能上使用。在“保存播放列表”之后刷新数组'单击按钮。
虽然这很简单,但有时简单并不那么简单,特别是在看了matlab代码大约10个小时之后。