eigener slider löst beim verschieben keine aktion aus?

  • eigener slider löst beim verschieben keine aktion aus?

    hi. ich hab mit eienr subklasse des nssliders das aussehen von dem etwas verändert.. aber jetzt löst der keien funktion mehr beim verschieben aus. Was ist falsch oder was fehlt noch damit das geht?


    Quellcode

    1. #import "MySliderCell.h"
    2. @implementation MySliderCell
    3. - (void)drawBarInside:(NSRect)frame flipped:(BOOL)flipped
    4. {
    5. NSImage *leftImage = [NSImage imageNamed:@"left.tiff"];
    6. NSImage *fillImage = [NSImage imageNamed:@"mitte.tiff"];
    7. NSImage *rightImage = [NSImage imageNamed:@"right.tiff"];
    8. NSSize size = [leftImage size];
    9. float addX = size.width / 2.0;
    10. float y = NSMaxY(frame) - (frame.size.height-size.height)/2.0 - 1;
    11. float x = frame.origin.x+addX;
    12. float fillX = x + size.width;
    13. float fillWidth = frame.size.width - size.width - addX;
    14. [leftImage compositeToPoint:NSMakePoint(x, y) operation:NSCompositeSourceOver];
    15. size = [rightImage size];
    16. addX = size.width / 2.0;
    17. x = NSMaxX(frame) - size.width - addX;
    18. fillWidth -= size.width+addX;
    19. [rightImage compositeToPoint:NSMakePoint(x, y) operation:NSCompositeSourceOver];
    20. [fillImage setScalesWhenResized:YES];
    21. [fillImage setSize:NSMakeSize(fillWidth, [fillImage size].height)];
    22. [fillImage compositeToPoint:NSMakePoint(fillX, y) operation:NSCompositeSourceOver];
    23. }
    24. - (void)drawKnob:(NSRect)frame
    25. {
    26. NSImage * knob;
    27. knob = [NSImage imageNamed:@"knob.tiff"];
    28. float x = frame.origin.x + (frame.size.width - [knob size].width) / 2;
    29. float y = NSMaxY(frame) - (frame.size.height - [knob size].height) / 2 + 2;
    30. [knob compositeToPoint:NSMakePoint(x, y) operation:NSCompositeSourceOver];
    31. }
    32. - (BOOL)_usesCustomTrackImage
    33. {
    34. return YES;
    35. }
    36. @end
    Alles anzeigen

    Quellcode

    1. #import "MySlider.h"
    2. @implementation MySlider
    3. - (void)awakeFromNib
    4. {
    5. MySliderCell *aCell = [[[MySliderCell alloc] init] retain];
    6. [self setCell:aCell];
    7. [aCell release];
    8. }
    9. @end
    Alles anzeigen


    und hier die headerdatein (sind glaub ich nicht so wichtig):

    Quellcode

    1. /* MySliderCell */
    2. #import <Cocoa/Cocoa.h>
    3. @interface MySliderCell : NSSliderCell
    4. {
    5. }
    6. @end

    Quellcode

    1. /* MySlider */
    2. #import <Cocoa/Cocoa.h>
    3. #import "MySliderCell.h"
    4. @interface MySlider : NSSlider
    5. {
    6. }
    7. @end
    Windows, nein danke...
  • RE: eigener slider löst beim verschieben keine aktion aus?

    In awakeFromNib ersetzt Du die normale Slider Cell durch Deine und damit verlierst Du auch alle Verbindungen, die Du im Interface Builder gesetzt hast. Warum setzt Du die Cell nicht bereits im Interface Builder auf Deine Subklasse? Geht das etwa nicht?

    Michael
  • RE: eigener slider löst beim verschieben keine aktion aus?

    Original von Michael
    In awakeFromNib ersetzt Du die normale Slider Cell durch Deine und damit verlierst Du auch alle Verbindungen, die Du im Interface Builder gesetzt hast. Warum setzt Du die Cell nicht bereits im Interface Builder auf Deine Subklasse? Geht das etwa nicht?

    Michael

    ich bin mir sicher das geht, aber ich hab ehrlich gesagt keine Ahnung wie das geht?
    Windows, nein danke...
  • RE: eigener slider löst beim verschieben keine aktion aus?

    Ob es so einfach geht, wie mit einem 'NSTableView', ich weiss es nicht.
    Aber wenn schon alles verknüpft ist, können die Verknüpfungen auch umgesetzt werden, etwa so:

    Quellcode

    1. [aCell setAction:[[self cell]action]];
    2. [aCell setTarget:[[self cell]target]];

    vor dem Aufruf von 'setCell'.
    Da ist übrigens noch ein 'retain' zuviel.
    I would be embarrassed if they did not spy on me.
  • Original von Clemens
    ah, danke.. hat funktioniert...

    Wenn ich das richtig verstehe:
    Du hast ja eine Slider-Subklasse. Die erhält ein -init… Dort solltest du deine eigene Cell setzen. Denn das ist ein Interna -> gehört in den -init…

    In den -awakeFromNib gehören die Initialisierungen der Verbindungen nach außen.

    Du bist mutmaßlich einfach zu spät dran. Das ist alles. Wenn du im -init… deine Cell setzt, sollte das eigentlich funktionieren, weil dann die Actions und Outlets bereits deine eigene Cell vorfinden.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?