I have custom colouring in the section headings, i.e. \section{\textcolor[red]{Heading}}, so when I use \tableofcontents it prints the table of contents including all the unnecessary colouring. Is there a way I can print the table of contents in all black text, but keep the actual colour coding I did for the sections?

-

Use the "ToC" entry of \section[<ToC entry>]{<body entry>}:
\section[Heading]{\textcolor{red}{Heading}}

If this is performed on a case-by-case basis, then the above solution is fine. However, for more consistent changes across (say) all section headings, you should consider using a package like sectsty or titlesec. For more on this option, see Is it possible to change text color for all headings?