Какова иерархия наследования класса UIControl в UIKit?

«Какова иерархия наследования класса UIControl в UIKit?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Класс UIControl находится в середине цепочки наследования UIKit, которая выглядит следующим образом:

NSObject → UIResponder → UIView → UIControl

Что дает каждое звено иерархии:

  • NSObject: Корневой класс большинства Objective-C/Swift классов в Cocoa Touch. Предоставляет базовые возможности, такие как работа с runtime и реализация протоколов.
  • UIResponder: Наследует от NSObject. Делает класс частью цепочки ответчиков (responder chain). Это дает возможность обрабатывать различные события: касания (touchesBegan), движение, нажатия с клавиатуры, удаленное управление.
  • UIView: Наследует от UIResponder. Добавляет возможности для отображения на экране: геометрия (frame, bounds), иерархия представлений (subviews, superview), анимация, рисование, автоматическая компоновка (Auto Layout).
  • UIControl: Наследует от UIView. Является базовым классом для всех интерактивных элементов управления. Добавляет:
    • Модель target-action: Стандартизированный механизм для обработки событий (.touchUpInside, .valueChanged) с помощью методов addTarget(_:action:for:).
    • Состояния (Control State): Свойства isEnabled, isSelected, isHighlighted, которые влияют на внешний вид и поведение.
    • Контентное выравнивание: Свойства для управления расположением заголовка и изображения.

Примеры подклассов UIControl: UIButton, UISwitch, UISlider, UITextField, UISegmentedControl.