Я работаю над проектом доступности для приложения iOS. Поскольку доступность не действует так, как рекламируется, я должен переопределить accessibilityFrame
, accessibilityActivationPoint
и pointInside:withEvent
в подклассе, чтобы расширить область, распознанную VoiceOver (как для рисования, так и для распознавания касания) за пределами «естественных» границ вида управления. Итак, чтобы изменить границы VoiceOver UIButton
, я должен подклассифицировать этот класс, а затем добавить эти три метода. Чтобы сделать это для UILabel
, я должен добавить еще один подкласс с кодом и так далее.Может ли подкласс B (который наследует от класса A) наследовать от подкласса A вместо самого A?
Я могу реорганизовать код в этих методах в центральное место, но мне было интересно, можно ли это сделать более элегантно с наследованием. Я хотел бы поместить этот код в подкласс UIView
(возможно, называется UIViewAccessible
), а затем создать подкласс UIButton
под названием UIButtonAccessible
, который наследует от UIButton
, который в свою очередь наследует от UIViewAccessible
вместо UIView
. Возможно ли это, или что-то подобное можно сделать с категорией?
Edit: Согласно документации, вы не можете действительно достичь этого с категорией:
Если имя метода, объявленного в категории такой же, как метод в исходном классе , или метод в другой категории того же класса (или даже суперкласс), поведение не определено в отношении того, какой метод реализации используется во время выполнения.
Есть ли другой способ сделать это?
Это не может быть сделано, как вы описываете, поскольку Objective-C не поддерживает множественное наследование. – rmaddy
Возможно ли использовать swizzling и/или категории для переопределения реализаций фреймворка с помощью собственного? –
Хмм, я не очень часто использую категории, но я всегда воспринимал их как способ добавления новых методов в существующий (возможно, закрытый) класс. Я не знал, что они могут также переопределить существующие методы в классе, если они действительно могут. Если это так, то я думаю, что моя задача может быть смехотворно легкой, так как я могу просто добавить эти три метода в категорию «UIView», и тогда мне даже не придется подклассифицировать что-либо еще. – MusiGenesis