我上传app两次都被拒,最后发现我修改后的代码需要也把获取navigationcontroller栈中的最后一个视图控制器修改为获取navigationcontroller栈中的倒数第二个视图控制器,查了下资料在
点击打开链接
找到了解决方案:
原理就是
把
navigationController栈中的视图控制器存到一个数组里,然后从这个数组里就可以任意获取自己想要的视图控制器了。
//
获取
navigationControllers
栈中倒数第二个视图控制器
modify by jfl 2013-04-04
NSMutableArray
*navigationControllers = [[[
EpubBookAppDelegate
shareApplicationDelegate
].
mainNavController
.
viewControllers
mutableCopy
]
autorelease
];
BookShelfViewController
*bookShelf = ((
SpringBoardViewController
*)([navigationControllers
objectAtIndex
:[navigationControllers
count
] -
2
])).
bookShelfViewController
;
我上传app两次都被拒,最后发现我修改后的代码需要也把获取navigationcontroller栈中的最后一个视图控制器修改为获取navigationcontroller栈中的倒数第二个视图控制器,查了下资料在点击打开链接找到了解决方案:原理就是把navigationController栈中的视图控制器存到一个数组里,然后从这个数组里就可以任意获取自己想要的视图控制器了。//获取
UIView
Controller
* currVC = nil;
UIView
Controller
* Rootvc = keyWindow.rootView
Controller
;
if ([Rootvc isKindOfClass:[UI
MVC模型中是不应该在Model或者View中
获取
Controller
的,但是有时候需要一个manager去管理多个MVC,那么需要push一个View
Controller
的时候可以通过下面这段代码来
获取
UINaviagtion
Controller
UI
Navigation
Controller
*nav;
UIView
Controller
*rvc = [[UIAppl
for(UIView
Controller
*
controller
in self.
navigation
Controller
.view
Controller
s){
if([
controller
isKindOfClass:[MMTLogVC class]]){
[self.
navigation
Controller
popToV...
// 根据
控制器
的表示取出
控制器
View
Controller
*vie = [story
instantiateView
Controller
WithIdentifier:@"story"];
//naviga
UI
Navigation
Controller
:容器,使用栈的形式存储和管理多个UIView
Controller
,每一个UIView
controller
就是一个层级页面,导航
控制器
每次只显示其存储的位于最上面的UIView
controller
;
UI
Navigation
Bar:容器,位于屏幕顶端的控件,与UI
Navigation
Controller
一对一对应,它继承UIView,使用栈的形式存储和管理多个UI
Navigation
Item,导航条上每次只显示其存储的位于最上面的UI
Navigation
Item;
1. 使用Segue实现
视图
之间的转换
Segue是一种在Storyboard中定义
视图
之间转换的方法。在Storyboard中,可以通过Ctrl拖拽一个
视图
控制器
之间的连接线来创建一个Segue,然后设置Segue的类型和标识符。在代码中,可以通过performSegue(withIdentifier:sender:)方法来触发Segue的执行。
示例:在一个应用中,有两个
视图
控制器
,一个是登录页面,一个是主页面。在Storyboard中,我们可以创建一个名为“loginToMain”的Segue,然后在登录页面中编写以下代码来触发Segue的执行:
```swift
performSegue(withIdentifier: "loginToMain", sender: nil)
2. 使用Present和Dismiss实现模态
视图
之间的转换
Present和Dismiss是一种在代码中实现
视图
之间转换的方法,适用于模态
视图
之间的转换。在代码中,可以使用present(_:animated:completion:)方法将一个
视图
控制器
以模态形式显示在另一个
视图
控制器
上,然后使用dismiss(animated:completion:)方法将其关闭。
示例:在一个应用中,有一个设置页面,用户可以在该页面中修改应用的设置。当用户点击“保存”按钮时,我们希望将设置页面关闭,并返回到主页面。在设置页面中,可以编写以下代码来实现这一功能:
```swift
@IBAction func saveButtonTapped(_ sender: UIButton) {
// 保存设置
dismiss(animated: true, completion: nil)
3. 使用
Navigation
Controller
实现多个
视图
之间的转换
Navigation
Controller
是一种用于管理多个
视图
控制器
之间转换的容器
控制器
。在Storyboard中,可以将多个
视图
控制器
嵌套在
Navigation
Controller
中,然后使用push和pop方法在它们之间转换。在代码中,可以使用pushView
Controller
(_:animated:)和popView
Controller
(animated:)方法来实现这一功能。
示例:在一个应用中,有一个包含多个列表项的主页面,每个列表项都可以进入一个详细页面进行查看。我们可以使用
Navigation
Controller
来管理这些页面之间的转换。在Storyboard中,我们可以将主页面和详细页面嵌套在一个
Navigation
Controller
中,然后在主页面中编写以下代码来实现转换:
```swift
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let detailView
Controller
= storyboard?.instantiateView
Controller
(withIdentifier: "DetailView
Controller
") as! DetailView
Controller
detailView
Controller
.item = items[indexPath.row]
navigation
Controller
?.pushView
Controller
(detailView
Controller
, animated: true)
以上是一些在Xcode中实现
视图
之间转换的常用方法及其示例。