iOS Custom Control - PullRequest
       14

iOS Custom Control

1 голос
/ 22 февраля 2012

Я создаю пользовательский элемент управления, который выглядит так, как показано на рисунке ниже.

enter image description here

В основном это будет меню со слайдером. Стрелки позволят мне изменить показ трех дней на дорожке слайдера. В соответствии с днем, который я выбираю с помощью ползунка, я хочу изменить некоторые виды на главном экране (это меню будет внизу моей страницы). Так что в основном это единственное, что я буду «слушать» в моем главном контроллере: если какой-то день был выбран.

Я понял весь код, который мне придется написать, но я не уверен, стоит ли мне подкласс UIControl или UIView. И если да, то где я должен написать код моего контроллера (изменение дней, добавление эффекта перетаскивания и т. Д.) В UIControl (UIView)? Или я должен подкласс UIViewController, и написать там весь код там. (но если так, почему я должен подкласс UIControl (UIView) в первом случае).

Таким образом, в основном я хочу знать, какие дополнительные файлы мне нужно создать, кроме интерфейса представления моего пользовательского элемента управления (который я сделал в IB), где я должен поместить код (IBOutlets, методы IBAction) и как мне это сделать. связаться с контроллером основного вида (я назначил главный контроллер делегатом моего пользовательского элемента управления?).

Извините за длинный пост.

Спасибо

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Рекомендую подкласс UIControl. Пользователи этого элемента управления могут [yourControl addTarget:self action:@selector(someMethod:) forControlEvents:UIControlValueChanged]; реагировать на измененные значения. В вашем контроле, когда вы определили, что был выбран новый день, вы звоните [self sendActionsForControlsEvents:UIControlValueChanged]; и вуаля, все заинтересованные классы будут проинформированы.

Держите этот контроль как можно более автономным. Это значит, просто придавайте ему столько логики, сколько вам нужно, и ничего более. Подумайте о том, как вы используете элементы пользовательского интерфейса, предоставляемые Apple: постарайтесь сделать их общими (если это практически возможно; используйте здесь здравый смысл). Вкратце: вы должны стремиться сделать этот элемент управления достаточно универсальным, чтобы он мог быть полезен вам в других проектах или других местах вашего приложения.

2 голосов
/ 22 февраля 2012

Краткий ответ: вы должны создать подкласс UIControl и поместить всю логику для рисования компонента и взаимодействия с ним.UIControl наследуется от UIView и добавляет поведение цели / действия.Таким образом, вы можете sendAction:to:forEvents: с UIControlEventValueChanged всякий раз, когда дата изменяется.

В качестве альтернативы вы можете реализовать протокол делегата, когда пользователь меняет выбранную дату.

Например:

@protocol DateSliderDelegate <NSObject>
  - (void)dateSlider:(id)slider dateDidChange:(NSDate *)date fromDate:(NSDate *)oldDate;
@end

Вы не хотите использовать UIViewController, поскольку его задача - управлять представлениями более высокого уровня, такими как экран, на котором включен ваш виджет.Вы будете использовать контроллер представления позже, когда будете использовать свой компонент, и будете делать такие вещи, как установка даты для первоначального отображения и прослушивание событий изменений.

...