Я работаю над проектом после моего бывшего коллеги.Код был великолепен, за исключением одного:
Главный контроллер
@interface MainController : UIViewController {
}
@property (nonatomic, strong) IBOutlet HeaderBar *headerBar;
- (void)setup;
- (IBAction)refreshHeader;
@end
@implementation MainController
- (void)setup{
HeaderBar *hb = [[HeaderBar alloc] initWithNibNames:@"HeaderBar"];
self.headerBar = hb;
}
- (IBAction)refreshHeader {
//Do something with headerBar's properties
//For example, [self.headerBar someiVar];
}
Затем есть кнопка в качестве подпредставления представления HeaderBar.Эта кнопка была связана с методом FirstResponder , который выглядит как refreshHeader
Код работает нормально, как он хотел.Но даже я новичок в разработке для iOS и пока не совсем понимаю, что такое FirstResponder.Я не чувствую себя хорошо с этим подходом к дизайну.
Так как эта кнопка принадлежит представлению headerBar.Он должен быть привязан к методу headerBar, верно?(предположим, что headerBar также является контроллером) Затем найдите способ отправить данные / результат / сообщение из headerBar в MainController вместо прямой отправки в MainController с помощью firstResponder.
Если это так, как я могуотправлять данные / результат / сообщение одному из методов MainController из метода HeaderBar вместо того, чтобы использовать подход, который появился в другой части кода.(Что мне тоже не нравится в этом вопросе, это выглядит странно. Похоже, неправильно создать связь между двумя контроллерами.)
Главный контроллер
- (void)anotherSetup{
FooterBar *fb = [[FooterBar alloc] initWithNibNames:@"FooterBar"];
fb.mainController = self;
self.footerBar = fb;
}
FooterBar
#import "MainController.h"
@interface FooterBar : UIViewController {
}
@property (nonatomic, strong) MainController *mainController;
- (void)someMethod;
@end
@implementation FooterBar
@synthesize mainController;
- (void)someMethod {
[self.mainController someMainControllerMethod];
}
Я читал некоторые другие связанные вопросы, большинство из них сказали, что другой подход заключается в определении Protocal и Delegate , это таклучший способ сделать это?Это единственный способ?Вместо того, чтобы два контроллера общались друг с другом.
Любые предложения приветствуются, исправьте и мое недоразумение.Мне придется работать над этим проектом месяцами, а он только на втором этапе из пяти.Итак, я бы хотел иметь как можно меньше фальшивых дизайнов.
С наилучшими пожеланиями
PS Извините, если код неверный, это не настоящий код.Что-то может не исправить, но, надеюсь, вы, ребята, можете увидеть картинку.