Put delegate methods into a category

I developed some application ’till now. Now I’m writing a new one and in this project I want to keep the code very clean, so it’s very easy to find the methods.
I want to start with the UIViewControllers whose view have a UITableView as subview. I wish to have a file with the name DetailViewController for all functions which belong directly to it. Another file with the name DetailViewController+Protocols should contain a category of the class above and all these delegate methods of UITableView.

Is it possible to do something like this? I want to keep my code clean and split it into multiple files.

  • How can I wait for a NSURLConnection delegate to finish before executing the next statement?
  • Delegates, can't get my head around them
  • Get current view controller from the app delegate (modal is possible)
  • swift delegate beetween two view controller without segue
  • Early return/golden path in Swift
  • Difference between protocol and delegates?

  • EDIT

    DetailViewController.h

    @interface DetailViewController : UIViewController
    
    ... Some Properties
    
    ... Some Methods
    
    @end
    

    DetailViewController.m

    #import "DetailViewController.h"
    
    @implementation DetailViewController
    
    ... Some Synthesizes
    
    ... Some Methods
    
    @end
    

    DetailViewController+Protocols.h

    @interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>
    
    @end
    

    DetailViewController+Protocols.m

    @implementation DetailViewController (Protocols)
    
    - (NSINteger)numberOfSections
    {
        return ...;
    }
    
    - (NSInteger)numberOfRowsInSection:(NSInteger)section
    {
        if (section == 0)
            return ...;
    
        return ...;
    }
    
    ...
    
    @end
    

    But then Xcode shows a warning that some of the delegate methods are not implemented in DetailViewController. I also tried it with importing the DetailViewController+Protocols.h in the DetailViewController.h. No changing.
    Then I tried it with ignoring the warnings and see: It worked! But why? Shouldn’t it work without these warnings?

    2 Solutions Collect From Internet About “Put delegate methods into a category”

    Yes it is. The only thing to keep in mind with categories is that you cannot @synthesize properties in them. Adding ivars in categories is more difficult as well.

    See this for more info on that.

    You don’t have to create an entirely separate named protocol in a different file if you’re only using it against one class. In fact, you probably shouldn’t because it’s just confusing.

    If you want to keep your primary class’ .h file clean, just move this:

    @interface DetailViewController (Protocols) <UITableViewDelegate, UITableViewDataSource>
    
    @end
    

    into your primary .m file above the @implementation

    I don’t see why you wouldn’t want to declare in your .h that your primary class implements the tableview delegate and datasource protocols, though. They’re descriptive.