Есть ли способ получить экземпляр UIView наследовать от UIControl программно? - PullRequest
0 голосов
/ 25 декабря 2011

Во многих книгах и руководствах по iOS они демонстрируют, как в конструкторе интерфейсов вы можете превратить UIView в UIControl и заставить его наследовать новые функциональные возможности более высокого уровня, чтобы реагировать на нажатия и вести себя, например, как кнопки.Это делается просто путем изменения типа класса в конструкторе интерфейса выбранного UIView.

Это часто делается для того, чтобы закрыть клавиатуру, когда кто-то касается «фона» или основного вида данного контроллера представления.Как только класс UIView изменен на UIControl, вы просто назначаете connect new IBAction, например, когда происходит событие TouchUpInside.

Теперь я понимаю эту концепцию, но она выглядит как странный взлом Xcode.Причина в том, что я не понимаю, как я мог бы сделать то же самое программно.Позвольте мне объяснить: если я создаю экземпляр UIView в коде, и я хочу, чтобы он вел себя как UIControl, как бы я сказал этому экземпляру UIView, что я хочу, чтобы он наследовал от UIControl.Теперь имейте в виду, что на самом деле я не хочу создавать подкласс UIControl, потому что это перепрыгнет через большее количество обручей, и я не думаю, что именно это делает Interface Builder, когда вы меняете этот тип класса, или это так?Кроме того, имейте в виду, что UIControl должен быть абстрактным классом, а не использоваться напрямую, иначе я, вероятно, просто сделал бы это.

В конечном счете, мой вопрос, есть ли эквивалентный способ выполнить то же самое в чистом видекод, и чтобы UIView стал UIControl таким образом, чтобы я мог назначать ему события более высокого уровня?

Надеюсь, это имеет смысл, если нет, я могу уточнить.

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

UIControl наследуется от UIView, поэтому, если вы хотите сделать это программно, вы просто создадите экземпляр UIControl.Так, например, если вы создаете представление контроллера вида программно, вы можете сделать что-то вроде:

- (void)loadView
{
  CGRect viewSize = /* some appropriate default size */
  UIControl* myControlView = [[UIControl alloc] initWithFrame:viewSize];
  // configure your control (e.g., set events, etc)
  [self setView:myControlView];
  [myControlView release]; // omit this line if using ARC
}
0 голосов
/ 05 января 2016

Я создал XIB-файл. тогда новый файл класса Objective c наследуется от UIView. я устанавливаю класс XIB Objective C класс, в построителе интерфейса и затем измените суперкласс класса Objective c на UIControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...