Я занимаюсь разработкой iOS. Сейчас играю с видами. В данный момент я не использую конструктор интерфейсов, потому что предпочитаю понимать, как все вещи работают под капотом. Вот почему я создаю элементы пользовательского интерфейса Views и т. Д. Программно. Тем не мение.
Вот как выглядит мой проект.
У меня есть класс с именем RootViewController. Я использую этот класс в качестве окна rootViewController.
Внутри этого класса у меня есть логика, которая загружает / выгружает представления. Вот некоторый код.
RootViewController.m
-(void)loadView
{
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
self.view = view;
self.view.backgroundColor = [UIColor lightGrayColor];
// create FirstViewController button
UIButton *firstViewButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
firstViewButton.frame = CGRectMake(20, 60, 280, 50);
firstViewButton.tag = 1;
[firstViewButton setTitle:@"Load First view" forState:UIControlStateNormal];
[firstViewButton addTarget:self
action:@selector(loadViewControlllers:)
forControlEvents:UIControlEventTouchUpInside];
// crate SecondViewController button
UIButton *secondViewButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
secondViewButton.frame = CGRectMake(20, 140, 280, 50);
secondViewButton.tag = 2;
[secondViewButton setTitle:@"Load Second view" forState:UIControlStateNormal];
[secondViewButton addTarget:self
action:@selector(loadViewControlllers:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:firstViewButton];
[self.view addSubview:secondViewButton];
[self.view release];
}
-(void)loadViewControlllers:(UIButton *)sender
{
if ([sender tag] == 1) {
if(firstViewController == nil) {
firstViewController = [[FirstViewController alloc]
initWithNibName:@"FirstViewController"
bundle:nil];
[self.view addSubview:firstViewController.view];
}
} else {
if(secondViewController == nil) {
secondViewController = [[SecondViewController alloc]
initWithNibName:@"SecondViewController"
bundle:nil];
[self.view addSubview:secondViewController.view];
}
}
}
Первый и второй контроллеры представления содержат одинаковый код
-(void)loadView
{
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
self.view = view;
self.view.backgroundColor = [UIColor redColor];
UIButton *remove = [UIButton buttonWithType:UIButtonTypeRoundedRect];
remove.frame = CGRectMake(20, 60, 280, 50);
[remove setTitle:@"Remove First view from superview" forState:UIControlStateNormal];
[remove addTarget:self
action:@selector(removeFromView:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:remove];
[self.view release];
}
-(IBAction)removeFromView:(id)sender
{
[self.view removeFromSuperview];
}
Пока все хорошо.
Здесь начинаются мои вопросы.
1) Это правильный подход к отображению / удалению просмотров. Один контроллер (rootViewController в моем случае), чтобы управлять ими всеми?
2) Не могли бы вы предложить мне способ передачи данных между первым, вторым и корневым представлениями? Допустим, загружен первый ViewController. Этот контроллер содержит текстовое поле и кнопку. Я хочу, чтобы пользователь вводил что-то в текстовое поле и нажимал кнопку, чтобы данные в этом текстовом поле были доступны для чтения rootViewController и secondViewController
3) Приложения работают хорошо. Нет сбоев и т. Д. Проблема в том, что когда ни один из первого или второго контроллера не вызывается, они не могут быть загружены снова.
Когда я нажимаю кнопку, ничего не происходит.
Последнее, но не извиняюсь за мой язык.