Results 1 to 4 of 4
  1. #1

    Member Since
    Feb 27, 2014
    Custom NSCell drawWithFrame:inView method not getting invoked in OSX 10.8
    I have an application where I have defined a custom cell and have overridden the method - (void) drawWithFrame:inView:

    This method was drawing my custom cells without any problems as long as I was building my app using Xcode 3.2 on OS X 10.6 or older.

    Now I am attempting to migrate the code to build with Xcode 4+ on OS X 10.8. And what I have found out is that my custom cell is not getting drawn anymore. After putting break points and running the app through the debugger, I realized that the overridden - (void) drawWithFrame:inView: method of the custom cell is not getting invoked at all.

    My questions are:

    1) What is it that makes this method to not invoke at all on OS X 10.8, while it gets invoked and works perfectly fine on OS X 10.6 or older?

    2) What alternative do I have to fix this issue?

    Thanks, Mriganka

  2. #2

    Mark FX's Avatar
    Member Since
    Aug 13, 2011
    West Sussex, UK
    Apple's documentation advises not to invoke drawWithFrame:inView in you're own subclasses, but advises people to use the drawInteriorWithFrame:inView: method instead.

    The documentation for the latest implementation of the NSCell class is listed below.

    The reason it's not working in the later OSX versions, is because this particular NSCell method has been changed in the way it's implemented.
    Once upon time this method used to be named drawWithFrameInView:, but that version has been deprecated now.

    Regards Mark

  3. #3

    Member Since
    Feb 27, 2014
    According to the documentation, drawWithFrame:inView: invokes drawInteriorWithFrame:inView: after it draws the cell's border.

    I tried overriding drawInteriorWithFrame:inView: in my code. That doesn't get invoked either.

  4. #4

    Mark FX's Avatar
    Member Since
    Aug 13, 2011
    West Sussex, UK
    I was reading the drawInteriorWithFrame:inView: method description in the documentation, listed below, and thats where it reccomends not using the drawWithFrame:inView: method,
    but if neither method is getting called then it's irrelevant anyway.

    Draws the interior portion of the receiver, which includes the image or text portion but does not include the border.

    - (void)drawInteriorWithFrameNSRect)cellFrame inViewNSView *)controlView
    The bounding rectangle of the receiver, or a portion of the bounding rectangle.
    The control that manages the cell.
    Text-type NSCell objects display their contents in a rectangle slightly inset from cellFrame using a global NSText object. Image-type NSCell objects display their contents centered within cellFrame. If the proper attributes are set, this method also displays the dotted-line rectangle to indicate if the control is the first responder and highlights the cell. This method is invoked from the drawCellInside: method of NSControl to visually update what the cell displays when its contents change. The drawing done by the NSCell implementation is minimal and becomes more complex in objects such as NSButtonCell and NSSliderCell.

    This method draws the cell in the currently focused view, which can be different from the controlView passed in. Taking advantage of this is not recommended.

    Subclasses often override this method to provide more sophisticated drawing of cell contents. Because drawWithFrame:inView: invokes drawInteriorWithFrame:inView: after it draws the cell's border, do not invoke drawWithFrame:inView: in your override implementation.

    Available in OS X v10.0 and later.
    See Also
    Declared In
    If neither method is getting called then you need to test that your NSCell subclass has been initialized properly, perhaps by checking one of it's properties in the log.

    Regards Mark

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Backup Method
    By tommytime555 in forum Other Hardware and Peripherals
    Replies: 3
    Last Post: 07-03-2015, 10:47 PM
  2. Which method do you use?
    By basecontrol in forum Running Windows (or anything else) on your Mac
    Replies: 8
    Last Post: 08-02-2011, 11:27 PM
  3. iPad Delivery Method
    By mu2002cs in forum iPad Hardware and Accessories
    Replies: 10
    Last Post: 03-27-2010, 01:45 AM
  4. OSX on custom machine
    By SigNu747 in forum macOS - Operating System
    Replies: 2
    Last Post: 05-12-2009, 02:06 PM
  5. Cocoa... custom class executes own method....? Help
    By Meds in forum macOS - Development and Darwin
    Replies: 5
    Last Post: 01-18-2009, 04:44 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts