5

大约一个月前,我和我的妻子想出了一个iPhone应用程序的好主意,所以我开始思考应用程序如何从用户透视,大约一周前我第一次打开XCode并开始发展。关于iPhone应用程序结构的问题 - 核心数据,视​​图,模态视图等

在我陷入应用程序的写作之前,我想确保我有一些清晰的关键概念,特别是与架构相关的关键概念。作为一个原则,我想尝试以编程方式(特别是UI)创建尽可能多的应用程序,以便我彻底了解正在发生的事情。稍后我可能会使用IB作为加快UI开发的工具(目前适用,因为我使用的是TableView而不是静态视图)。

视图控制器

  • 所以UINavigationControllers一般不子类和在AppDelegate的属性被创建并是MainWindow.xib中的主要“子视图”。

  • UINavigationController控制视图堆栈,并且通常使用根视图控制器启动。

  • 导航控制器通常从当前/顶部视图控制器中引用并作为[自我导航控制器]从UIViewController父类的只读属性发出消息。

核心数据

  • 被管理对象的上下文是在模型中存取数据的主控制点,但它一般不能直接使用,而是取指令请求用于返回数组,集合或数据对象的字典然后由视图控制器用于呈现和操纵数据。

  • 上下文创建为应用程序委托中的属性,然后在启动时将其传递给根视图控制器,该控制器本身将其传递到堆栈中的后续视图,然后告知导航控制器更改视图(例如当一个单元被挖掘)。

所以这是我花一个星期才能到这里,我可以创造我的模型,用数据填充它,并在表视图中显示,但我一直没能找到模态浏览发现,当你想编辑数据,特别是如何设计模态视图(如果与普通视图有任何特定的区别)?

此外,我不完全确定数据的整个“绑定”,以查看对象的功能以及如何以编程方式执行它?

非常感谢您的意见,提前提出建议。

回答

2

当使用presentModalViewController显示时,视图变为模态:animated。您可以在呈现模态视图之前传递要编辑的模型。

DetailViewController dvc = ...; 
dvc.model = model; 
dvc.delegate = self; // if you want to use a delegate pattern. 
[self presentModalViewController:dvc animated:YES]; 

由于要编辑的模型在模态视图控制器中可用,因此您可以在viewDidLoad中设置值。 iOS平台上没有可用的数据绑定,这意味着您必须手动更新视图和模型。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.someTextField.text = self.model.someText; 
} 

使用模态视图时需要考虑的事情是您必须提供一种方法来解除它。例如。通过导航栏顶部的取消和保存按钮。解雇模态视图控制器使用的完成:

[self dismissModalViewControllerAnimated:YES]; 

有可能拒绝来自模态视图控制器内的模式的看法,但也意味着这样的模态控制器必须能够模型保存问题。我会亲自使用一个回调函数让控制器知道是否保存或取消以及处理模态视图的解除。这可以使用委托模式完成。因此,当用户点击保存时,您可以更新模型,然后通知代表。

- (IBAction)save:(id)sender { 
    self.model.someText = self.someTextField.text; 
    [self.delegate detailViewControllerDidSave:self]; 
} 

而在主持人有这样的方法:

-(void)detailViewControllerDidSave:(DetailViewController *)controller { 
    // save the model 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

嗨,罗伯特,谢谢。那么detailViewController有什么特别的地方,当它显示模态字段变得可编辑? – Glynton 2010-11-04 13:24:47

+0

不客气。我不认为有这样做的自动方式。 UIViewController有一个编辑属性,可以通过setEditing:animated:来切换可编辑状态。如果你想使用相同的DetailViewController进行显示和编辑,你可以在调用presentModalViewController:animated:之后调用[dvc setEditing:YES animated:NO]。然后你必须在DetailViewController中实现setEditing:animated:并更新适当的控件,比如self.someTextField.enabled = edit。 – 2010-11-04 18:39:56

+0

“iOS上没有可用的数据绑定” - 不再适用:https://www.youtube.com/watch?v = 88DkI8ZfEkg - 将在年底发布(某些操作系统许可证) – Michael 2015-11-04 01:34:08

0

一些答案,从我的观点/数据的知识。我还没有CoreData的经验,所以不会回答这个部分。

  • 模态视图只是一个常规视图。但是它的大小可能会有所不同,因为它涵盖了一些不会被导航控制器中推送的视图覆盖的UI元素。

  • 对于视图的数据“绑定”,如果填充表视图,则已经完成了该操作。在您的Controller中有一系列'数据源'方法可以在您的模型中将您的数据提供给您的视图(MVC模式)。

+0

...所以绑定更多的IB工具的,你有数据的设置,查看对象实体的数组?编程相当于覆盖 - (UITableViewCell *)tableView:(UITableView *)tableView – Glynton 2010-11-03 16:47:23