Iphone 处理观点和其他一些事情
我正在学习iOS开发。现在玩视图。我现在不使用interface builder,因为我更喜欢了解所有东西在引擎盖下是如何工作的。这就是我以编程方式创建视图、UI元素等的原因。然而 下面是我的项目的样子 我有一个名为RootViewController的类。我将该类用作窗口rootViewController。 在该类中,我有一个加载/卸载视图的逻辑。下面是一些代码 RootViewController.mIphone 处理观点和其他一些事情,iphone,objective-c,Iphone,Objective C,我正在学习iOS开发。现在玩视图。我现在不使用interface builder,因为我更喜欢了解所有东西在引擎盖下是如何工作的。这就是我以编程方式创建视图、UI元素等的原因。然而 下面是我的项目的样子 我有一个名为RootViewController的类。我将该类用作窗口rootViewController。 在该类中,我有一个加载/卸载视图的逻辑。下面是一些代码 RootViewController.m -(void)loadView { UIView *view = [[UIVie
-(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您能给我建议一种在第一视图、第二视图和根视图之间传递数据的方法吗?假设加载了firstViewController。该控制器包含文本字段和按钮。我想要的是,当用户在文本字段中键入某个内容并按下按钮时,该文本字段中的数据能够被rootViewController和secondViewController读取
3.应用程序运行良好。没有崩溃等。问题是,当第一个或第二个控制器都没有被调用时,它们就不能再次加载。
当我按下按钮时,什么也没发生
最后但并非最不重要的是,我对我的语言感到抱歉
1这是否是显示/删除视图的正确方法。一个控制器
在我的情况下,rootViewController可以对它们进行规则化吗
没关系。但是,如果firstViewController和secondViewController共享完全相同的逻辑,那么它们实际上是一个类,通常删除冗余是安全的
你能给我建议一种在第一、第二和第三方之间传递数据的方法吗
根视图?假设加载了firstViewController。那个控制器
包含文本字段和按钮。我想要的是当用户输入
文本字段中的某个内容和按钮被按下,其中的数据
文本字段可由rootViewController和
第二视图控制器
您可以使用单例实例来保存共享状态,即MVC模式中的模型,但不建议这样做。
IMHO,您可以使用具有键值观察模式的观察者模型。参见苹果指南。或者,您可以从一个控制器发布通知,以通知对该类型通知感兴趣的任何其他控制器。请参阅[此处的指南]
3.应用程序运行良好。没有碰撞等。问题是
当第一个或第二个控制器都不能被调用时
重新加载。当我按下按钮时,什么也没发生
在上面的代码中,仅当控制器IVAR为nil时才添加子视图。试着修正这个逻辑