Вы, вероятно, правы.Самый простой способ - добавить некоторые свойства в FlipsideViewController
и установить их.Затем позвольте viewWillAppear
установить фактические переключатели, используя эти свойства.
Это также поставит проблемы макета интерфейса пользователя FlipsideViewController
там, где они принадлежат, а именно в FlipsideViewController
, а не в любом другом контроллере, который может когда-либо использоватьЭто.(т.е. если вы когда-нибудь решите не использовать переключатель, а какую-то кнопку, вы можете изменить FlipsideViewController
, не обращая внимания на другой код)
edit
Некоторые уточнения.Попробуйте добавить свойства к FlipsideViewController
с этими строками в соответствующих местах:
BOOL switchState;
NSInteger locationMode;
@property (nonatomic,assign) BOOL switchState;
@property (nonatomic,assign) NSInteger locationMode;
@synthesize switchState;
@synthesize locationMode;
Тогда в вашем текущем -(IBAction)showInfo:(id)sender
вы можете сказать:
FlipsideViewController *controller = [[FlipsideViewController alloc]
initWithNibName:@"FlipsideView" bundle:nil];
controller.switchState = sunPathIsVisible;
controller.locationMode = locationMode;
controller.delegate = self;
// etc etc
Затем, в FlipsideViewController
, в viewDidLoad
укажите фактическое значение переключателя:
[self.pathSwitch setOn:self.sunPathIsVisible];
[self.locationSelector setSelectedSegmentIndex:self.locationMode];
Это а) решит вашу проблему и б) разделит ваши опасения относительно пользовательского интерфейса.Если вы решите изменить макет FlipsideViewController
, нет необходимости изменять какой-либо код, кроме FlipsideViewController
.
. Существуют и другие способы достижения этого, например, с помощью viewDidLoad
.получите значение из его делегата, которое будет выглядеть так:
[self.pathSwitch setOn:[delegate pathSwitch]];
Что может быть лучше, в зависимости от вашей ситуации.Вообще говоря, я всегда предпочел бы этот последний подход, так как он предотвращает проблемы синхронизации между вашими различными контроллерами представления.