How to assign a class method as a ClickedCallback?
Show older comments
The class may change, but the method names are the same.
classdef BaseClass < handle
properties
p = []
end
methods
function h = get_save_handle( obj )
h = @obj.save;
end
end
end
classdef Class1 < BaseClass
properties
p1 = []
end
methods
function save( obj )
% ...
end
end
end
classdef Class2 < BaseClass
properties
p2 = []
end
methods
function save( obj )
% ...
end
end
end
I need to change the callback of a save button in my UI depending on the user's data, which will determine which class is used. So if I'm using class1, the ClickedCallback of my save button needs to be class1.save(), etc. Here is how I assign the callback:
switch data_type
case 'Class1'
save_data = Class1();
case 'Class2'
save_data = Class2();
end
saveUIButton.set( 'ClickedCallback', { save_data.get_save_handle(), f }, 'UserData', save_data ) % 'f' is my figure.
But when I click the save button, the varargin{:} causes an error because the 'save' function arguments aren't compatible:
Error using Class1/save
Too many input arguments.
Error in BaseClass>@(varargin)obj.save(varargin{:}) (line 82)
h = @obj.save;
Error while evaluating PushTool ClickedCallback.
3 Comments
per isakson
on 13 Jan 2020
Did you find a solution? If not, add varargin to the signature
function save( obj, varargin )
% ...
end
and set a break-point at the first executable line of save. Run and inspect varargin
Mohammad Sami
on 14 Jan 2020
Most likely its because the button will pass itself and the event variables in the callback. So you need to add more variables to your save function. If you don't need them in your callback you can use ~ to replace the variable in the function signature.
function save( obj , ~ , ~)
Dominik Mattioli
on 14 Jan 2020
Edited: Dominik Mattioli
on 14 Jan 2020
Accepted Answer
More Answers (0)
Categories
Find more on Data Type Identification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!