Есть несколько подходов для достижения того, что вы просите.Подход, который я обычно использую, заключается в том, что я делаю что-то вроде этого:
// CustomTabBarController.h
@protocol CustomTabBarControllerDelegate
- (void)buttonAction:(id)sender;
@end
@interface CustomTabBarController : UITabBarController {
id<CustomTabBarControllerDelegate> customDelegate;
}
@property(nonatomic, assign) id<CustomTabBarControllerDelegate> customDelegate;
@end
// CustomTabBarController.m
@interface CustomTabBarController ()
- (void)buttonAction:(id)sender;
@end
@implementation CustomTabBarController
@synthesize customDelegate;
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
// Configuration of button with title and style is left out
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
- (void)buttonAction:(id)sender {
[self.customDelegate buttonAction:sender];
}
@end
Я не знаю, что будет делать ваша кнопка, поэтому я просто вызываю метод buttonAction:
.Поскольку UITabBarController
уже имеет свойство с именем delegate
, я вызвал нашего делегата customDelegate
.Все, что вам нужно сделать, чтобы сделать вышеупомянутую работу, это добавить следующую строку в ваш корневой контроллер представления (или любой другой контроллер, который вы хотите обработать с помощью действия кнопки).
customTabBar.customDelegate = self;
Конечно, вы также должны реализоватьпротокол.
Можно также представить, что не используется делегат, и просто установить цель следующим образом:
[button addTarget:self.rootViewController action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
Приведенный выше код предполагает, что customTabBarController
имеет свойство rootViewController
и чтоэто было установлено.Также предполагается, что контроллер корневого представления имеет следующий метод:
- (void)buttonAction:(id)sender;
Я предпочитаю делегированный подход, так как это более общий подход, но более поздний подход также будет работать.Использование NSNotificationCenter
также вариант, но я лично не фанат отправки уведомлений, когда в этом нет необходимости.Я обычно использую уведомления только тогда, когда несколько объектов должны ответить на событие.