NOEDIT applies to every screen, NOSEARCH only applies to a search screen.
You can change the settings for any field at any time to override what was declared in the Data Dictionary. The best place is in the _cm_changeConfig() method, as in the following example:
function _cm_changeConfig ($where, $fieldarray)
{
if ($GLOBALS['mode'] == 'search') {
unset($this->fieldspec['field1']['noedit']);
} // if
return $fieldarray;
} // _cm_changeConfig
You can also add a setting instead of clearing it, as in:
$this->fieldspec['field1']['nodisplay'] = 'y';
$this->fieldspec['field2']['nosearch'] = 'y';
$this->fieldspec['field3']['noedit'] = 'y';