Sam*_*Sam 5 iphone cocoa-touch uiviewcontroller uinavigationcontroller ios
我有一个UIViewController - 我们称之为"FormController" - 它只是一个编辑对象的表单.我想在两种不同的情况下使用它:
创建一个新对象 - 使用UINavigationController的presentModalViewController:方法.
编辑现有对象 - 将视图控制器推送到UINavigationController堆栈,而不是使用对话框方法.
在模态情况下,我希望有一个带有"取消"和"完成"按钮的工具栏,但在堆栈情况下,我想要只有UINavigationController提供的导航栏.
这类似于Contacts应用程序,其中"New Contact"和"Edit Contact"屏幕似乎使用相同的视图控制器,但New Contact表单以模态方式呈现,而Edit屏幕被推送到导航堆栈.
我的问题是:在不必编写2个独立但大部分相同的视图控制器的情况下,处理这两种情况的最佳方法是什么?
我想创建一个"ModalFormController",通过组合封装裸"FormController"并添加一个工具栏,但我在文档中的某处读到Apple不建议嵌套视图控制器.
我所做的(有时)是设置一个enum指定视图控制器的类型。
例如,您可能有两种类型:一个Edit类型和一个Add(“新”)类型。
该Add类型是通过模态视图控制器实现的,同时该Edit类型被推送到现有的导航堆栈上。
在视图控制器的-viewDidLoad:方法中,我只是创建一个switch/case树,根据上面指定的类型枚举来设置标题和其他外观特征。
这样做的好处是很容易添加新类型。缺点是处理此枚举的条件树可能会很快变得复杂,具体取决于类型的不同程度。
但switch/case树使它更容易管理。
因此,这取决于您想要对这两种类型做什么。但这绝对是可行的。
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |