Question

Does Xcode support anything akin to Visual Studio style #region directives for arbitrary code folding?

Was it helpful?

Solution

No, you can only fold code on various defined scoping levels in Xcode.

You can use little tricks to make navigating via the function menu easier, though.

#pragma mark

Allows you to create a grouping where the label following mark will show up in the function menu. If the label is a hyphen, a separator is inserted into the function menu.

Also, the following labels in comments will show up in the function menu:

// MARK:
// TODO:
// FIXME:
// !!!:
// ???:

Obviously since #pragma mark is not really portable, if you're building a portable application and need it to work with a compiler that doesn't just ignore #pragma directives that it doesn't understand, the comment-style mark is a decent alternative.

OTHER TIPS

I am going to hell for this but here goes:

At the top of a given file, put

#define FOLD 1

Wherever you want to fold something, wrap it in an if block like so:

if(FOLD) {
 // your code to hide
 // more code
}

That will let you fold it away out of sight.

That won't work in the place you want it most, that is, around groups of functions or methods.

It may be useful inside a long, linear method with no internal conditionals or loops, but such methods aren't common in general Mac OS X UI code, though if you're writing some big numeric or graphics-crunching code it could help group things.

And the if(fold) is entirely superfluous. Just use the braces inside a method or function and Xcode will fold them.

Try this way :

//region title1
{
    //region Subtitl1
    {

    }
    //region Subtitl2
    {

    }
}

It can do like that :

It can do like that :

Without support for .Net style regions, being able to collapse all your functions at the same time is the next best thing.

command-option-shift-left arrow to collapse all.

command-option-shift-right arrow to expand all.

Xcode will remember the last state of collapsed functions.

Put your desired code inside brackets { }, and it will become a folding zone.

But you have to keep in mind that brackets also define variables scope, so this code should not have variables declarations which will be used outside these brackets.

One nice solution I just found:

Put your project into one big namespace. Close and reopen this namespace for the individual sections of your source file:

namespace myproj { // members of class MyClassA

void MyClassA::dosomething()
{
}

void MyClassA::dosomethingelse()
{
}

} // members of class MyClassA
namespace myproj { // members of MyClassB

void MyClassB::dosomething()
{
}

void MyClassB::dosomethingelse()
{
}

} // members of MyClassB
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top