Все они выглядят по-разному, чтобы быть для меня обычным видом. Если вам просто нужен такой элемент управления для одного представления (т. Е. Не более гибко настраиваемый элемент управления типа контейнера), он должен быть относительно быстрым и простым в использовании в xcode & IB. Я делал подобные вещи в своих приложениях. Я бы предпринял следующие шаги:
1) создайте пустой файл NIB и создайте там свой элемент управления, используя элементы управления UIView, UIImageView, UIButton и т. Д.
2) Создать новый класс ObjC, производный от UIView
3) Убедитесь, что «корневой» объект UIView в NIB имеет тип класса, соответствующий вашему производному классу ObjC UIView
4) Присоедините обработчики событий IBOutlets и IBAction к вашему классу и подключите все события кнопки («Подправить внутри») к вашим методам обработчика событий класса в IB.
5) Добавьте статическую фабричную функцию в ваш класс, чтобы создать себя из NIB. например
// Factory method - loads a NavBarView from NavBarView.xib
+ (MyCustomView*) myViewFromNib;
{
MyCustomView* myView = nil;
NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"MyCustomViewNib" owner:nil options:nil];
// The behavior here changed between SDK 2.0 and 2.1. In 2.1+, loadNibNamed:owner:options: does not
// include an entry in the array for File's Owner. In 2.0, it does. This means that if you're on
// 2.2 or 2.1, you have to grab the object at index 0, but if you're running against SDK 2.0, you
// have to grab the object at index:1.
#ifdef __IPHONE_2_1
myView = (MyCustomView *)[nib objectAtIndex:0];
#else
myView = (MyCustomView *)[nib objectAtIndex:1];
#endif
return myView;
}
6) Создайте и поместите в родительский вид как обычно:
MyCustomView* myView = [MyCustomView myViewFromNib];
[parentView addSubview:myView];
myView.center = parentView.center;
Что касается обработки событий, я склонен создавать только один обработчик событий кнопки и использовать переданный параметр id, чтобы определить, какая кнопка нажата, путем сравнения с членами IBOutlet или тегами UIView. Я также часто создаю протокол делегата для своего пользовательского класса представления и перезваниваю через этого делегата из обработчика событий кнопки.
например
MyCustomViewDelegate.h:
@protocol MyCustomViewDelegate
- (void) doStuffForButton1;
// etc
@end
ParentView.m:
myView.delegate = self;
- (void) doStuffForButton1
{
}
MyCustomView.m:
- (IBAction) onButtonPressed:(id)button
{
if (button == self.button1 && delegate)
{
[delegate doStuffForButton1];
}
// or
UIView* view = (UIView*)button;
if (view.tag == 1 && delegate)
{
[delegate doStuffForButton1];
}
}
Надеюсь, это поможет