{"id":15905,"date":"2022-10-13T12:11:43","date_gmt":"2022-10-13T06:41:43","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/"},"modified":"2022-10-13T12:11:43","modified_gmt":"2022-10-13T06:41:43","slug":"solved-subclassing-nsoutlineview-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/","title":{"rendered":"[Solved] Subclassing NSOutlineView [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-992455\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"992455\" data-parentid=\"992389\" data-score=\"14\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>Firstly, before you subclass an object, you should ask yourself &#8220;do I <em>need<\/em> to do this?&#8221;. Subclassing is a more complex way of interacting and extending the functionality of other classes, so you should make sure that what you are trying to achieve cannot easily be achieved through another, simpler method, such as delegation, notifications etc. Obviously if you are trying to change the way the control looks this is going to be more easily accomplished through subclassing, but make sure you check all the other available options. Remember that <code>NSOutlineView<\/code> has a fairly long object tree &#8211; it inherits from <code>NSTableView<\/code>, which inherits from <code>NSControl<\/code>, which inherits from <code>NSView<\/code>, which inherits from <code>NSResponder<\/code> which inherits from <code>NSObject<\/code>, and there are various helper methods that exist in each of these classes which can often help you achieve what you want.<\/p>\n<p>However, if you check all of these options and decide to subclass <code>NSOutlineView<\/code>, it depends what you want to do with your subclass. The easiest way to create the shell of your subclass would be to select <code>File &gt; New File<\/code> then choosing <code>Objective-C class<\/code>, as you would with any other class, which will create a new class, with header and implementation files, that inherits from <code>NSObject<\/code>. Then you can simply change the line in your header file:<\/p>\n<pre><code>@interface MyClass : NSObject { \/\/ Where MyClass is the name of your class\n<\/code><\/pre>\n<p>to<\/p>\n<pre><code>@interface MyClass : NSOutlineView {\n<\/code><\/pre>\n<p>which will cause your class to inherit from <code>NSOutlineView<\/code>. Since it is a subclass of <code>NSOutlineView<\/code>, this gives you lots of opportunities to change the default behaviour of the control.<\/p>\n<p>Since you are creating a subclass, you can change the default implementation of any method up the object tree &#8211; that is, you can override methods declared in <code>NSOutlineView<\/code>, <code>NSTableView<\/code>, <code>NSControl<\/code>, <code>NSView<\/code>, <code>NSResponder<\/code> and <code>NSObject<\/code> (although you should rarely override methods declared in <code>NSObject<\/code>). You do not need to redefine the method signature in your header file, you can simply override the function by implementing it in your subclass&#8217;s implementation. For example, if you wanted to override <code>NSView<\/code>&#8216;s <code>drawRect:<\/code> method, you would do the following in your subclass&#8217;s implementation:<\/p>\n<pre><code>- (void)drawRect:(NSRect)rect \/\/Method signature from the docs\n{\n    \/\/Code here\n}\n<\/code><\/pre>\n<p>When <code>drawRect:<\/code> is called upon your class, your code will be executed instead of the code in <code>NSView<\/code>.<\/p>\n<p>You can also pass method calls up the tree for methods that you do not want to handle. This is done by default, so you do not need to create empty methods that simply call the method on <code>super<\/code>, however, if you override a method and want to allow one of your superclasses to handle it first, you could do the following:<\/p>\n<pre><code>- (void)expandItem:(id)item\n{\n    [super expandItem:item];\n\n    \/\/Your code here\n}\n<\/code><\/pre>\n<p>This would be beneficial if you wanted to change a variable in your class, for example, but provide the default implementation of the method by first passing the method call up the tree.<\/p>\n<p>Subclassing can be a rather complex process, especially for such a complex object as a control, although it can be very useful and powerful. <\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">18<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Subclassing NSOutlineView [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Firstly, before you subclass an object, you should ask yourself &#8220;do I need to do this?&#8221;. Subclassing is a more complex way of interacting and extending the functionality of other classes, so you should make sure that what you are trying to achieve cannot easily be achieved through another, simpler method, such as delegation, &#8230; <a title=\"[Solved] Subclassing NSOutlineView [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/\" aria-label=\"More on [Solved] Subclassing NSOutlineView [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[931,4088,470],"class_list":["post-15905","post","type-post","status-publish","format-standard","hentry","category-solved","tag-cocoa","tag-nsoutlineview","tag-objective-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>[Solved] Subclassing NSOutlineView [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Subclassing NSOutlineView [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] Firstly, before you subclass an object, you should ask yourself &#8220;do I need to do this?&#8221;. Subclassing is a more complex way of interacting and extending the functionality of other classes, so you should make sure that what you are trying to achieve cannot easily be achieved through another, simpler method, such as delegation, ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-13T06:41:43+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Subclassing NSOutlineView [closed]\",\"datePublished\":\"2022-10-13T06:41:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/\"},\"wordCount\":460,\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"keywords\":[\"cocoa\",\"nsoutlineview\",\"objective-c\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/\",\"name\":\"[Solved] Subclassing NSOutlineView [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\"},\"datePublished\":\"2022-10-13T06:41:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/solved-subclassing-nsoutlineview-closed\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Subclassing NSOutlineView [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#website\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/#\\\/schema\\\/person\\\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"contentUrl\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/wp-content\\\/litespeed\\\/avatar\\\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\\\/\\\/jassweb.com\"],\"url\":\"https:\\\/\\\/jassweb.com\\\/solved\\\/author\\\/jaspritsinghghumangmail-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Subclassing NSOutlineView [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Subclassing NSOutlineView [closed] - JassWeb","og_description":"[ad_1] Firstly, before you subclass an object, you should ask yourself &#8220;do I need to do this?&#8221;. Subclassing is a more complex way of interacting and extending the functionality of other classes, so you should make sure that what you are trying to achieve cannot easily be achieved through another, simpler method, such as delegation, ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/","og_site_name":"JassWeb","article_published_time":"2022-10-13T06:41:43+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Subclassing NSOutlineView [closed]","datePublished":"2022-10-13T06:41:43+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/"},"wordCount":460,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["cocoa","nsoutlineview","objective-c"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/","name":"[Solved] Subclassing NSOutlineView [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-13T06:41:43+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-subclassing-nsoutlineview-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Subclassing NSOutlineView [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1777008400","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/15905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=15905"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/15905\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=15905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=15905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=15905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}