Например, у нас есть свой компонент с шаблоном template.php:

<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

/** @var array $arResult */

foreach ($arResult['ITEMS'] as $arItem): ?>
    <div>
        <?= $arItem['NAME'] ?>
    </div>
<?php endforeach; ?>

Для добавления режима редактирования используется метод CIBlock::GetPanelButtons, который возвращает массив с кнопками управления элементами инфоблока.

В классе class.php, после того, как получили элементы инфоблока, или в result_modifier.php шаблона добавляем следующий код:

<?php

foreach ($arResult['ITEMS'] as &$arItem) {
    $arLinks = CIBlock::GetPanelButtons($arParams['IBLOCK_ID'], $arItem['ID']);

    // кнопка редактирования
    $arItem['EDIT_LINK'] = $arLinks['edit']['edit_element']['ACTION_URL'];

    // кнопка удаления
    $arItem['DELETE_LINK'] = $arLinks['edit']['delete_element']['ACTION_URL'];
}

Теперь внесем в файл шаблона template.php необходимые правки, чтобы появились кнопки редактирования.

<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

/** @var array $arResult */

foreach ($arResult['ITEMS'] as $arItem) :
    $this->AddEditAction(
        $arItem['ID'],
        $arItem['EDIT_LINK'],
        CIBlock::GetArrayByID($arItem['IBLOCK_ID'], 'ELEMENT_EDIT')
    );

    $this->AddDeleteAction(
        $arItem['ID'],
        $arItem['DELETE_LINK'],
        CIBlock::GetArrayByID($arItem['IBLOCK_ID'], 'ELEMENT_DELETE'),
        [
            'CONFIRM' => GetMessage(
                'CT_BNL_ELEMENT_DELETE_CONFIRM'
            ),
        ]
    );
    ?>

    <div id="<?= $this->GetEditAreaId($arItem['ID']) ?>">
        <?= $arItem['NAME'] ?>
    </div>

<?php endforeach; ?>

Не забывайте добавить атрибут id на DIV элемента. Именно его-то часто и забывают указать.