1、前期所实现的PlayingCard游戏,其View Controller只能适应PlayingCard这一种游戏规则。而将createDeck函数修改为返回一个nil后,整个View Controller与PlayingCard就没有关系了(同时也就没法运行了),成为了一种抽象的概念(类似于C++中的抽象类),实际的控制器必须 派生这个类才能实现自身的功能。
新建一个View Controller类,并实现createDeck方法。此时build工程,无法正常运行。因为当前storyboard关联的依然是那个抽象类。
修改方法:在storyboard最下一栏中选择View Controller,然后在右侧identity inspector(就是右侧栏顶部左起第三个标签),在Class一栏中改为派生类即可。如下图所示:
2、多MVC:
#如何创建:在控件库中拖出一个新的View Controller到storyboard中;新建一个视图控制器类;参考1的方法将storyboard于视图控制器类绑定;
#如何显示多MVC:使用UINavigationController和UITabBarController,这两类的特点是他们的“view”可以是另一个视图控制器;
3、导航控制器UINavigationController:
#适用场合:需要显示多级信息的时候;
# 组成元素:导航栏(上面的内容由所VC包含的MVC的navigationItem决定);标题(也是由包含的MVC的title决定);导航栏右侧按键 (由包含的MVC的rightBarButtonItem决定)和返回键;地步的工具栏(由包含的MVC的toolBarItems决定);
#segue:由一个MVC进入到另一个MVC的机制,也可以认为是场景切换的机制。
#使用方法:在storyboard中拖入另一个view controller,在前一个viewcontroller的按钮等控件中ctrl+拖动指向第二个viewcontroller,这样就建立起了 segue关系。随后选择根视图控制器,将其植入navigation controller中(editor->embed in->navigation controller);
#个性化定义:双击指定子MVC的标题(title);可以在控件库中选择UIBarButtonItem添加到导航栏作为右侧按钮;
#场景切换的函数:
1、准备相关的信息:-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
2、确定切换是否执行:-(BOOL)shouldPerformSegueWithIdentifier:(NSString *) identifier sender:(id)sender;返回NO则不进行切换;不常用;
3、通信方式:在源ViewController中实现prepareForSegue,则可以获得segue.destinationViewController,这样就可对目标ViewController进行操作;
#通过代码来创建导航控制器
1、创建一个ViewController类,命名为RootViewController;在AppDelegate.m中引用其头文件;
2、创建根视图控制器和导航控制器;
3、将导航控制器设为根控制器;完成后的didFinishLaunchingWithOptions如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
//创建根视图控制器
RootViewController *rootViewController = [[RootViewController alloc] init];
//创建导航控制器
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
//将导航控制器设为根控制器
self.window.rootViewController = navigationController;
return YES;
}
然后运行就会发现根视图出现在了导航控制器开始的位置。
4、添加视图切换的功能:首先在根视图中添加控件,用于控制显示下一个视图控制器,方法是重写loadView:
-(void) loadView { UIView *baseView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; self.view = baseView; baseView.backgroundColor = [UIColor greenColor]; UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [button setTitle:@"Push" forState:UIControlStateNormal]; [button setTintColor:[UIColor whiteColor]]; [button setFrame:CGRectMake(90, 200, 140, 35)]; [button setBackgroundColor:[UIColor purpleColor]]; [button addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; }
在控件的响应函数中,新建并初始化第二个ViewController,并将其push到导航控制器中。
至此,在第一个视图中点击push按钮,导航栏就会进入第二个视图控制器中。需要注意的是,一个导航控制器所控制的多个视图控制器,每一个都可以用
self.navigationController的方法获取到导航控制器;导航栏(NavigationBar)和工具栏(ToolBar)属于导航控制器,但是上面的元素属于各个子视图控制器;
在第二个视图控制器中可以添加返回功能,很简单,让self.navigationController弹出即可。
[self.navigationController popViewControllerAnimated:YES];
4触控栏UITabBarController
#触控栏所包含的各个视图控制器是平级关系,不存在前后级的关系;具体的使用方法与导航控制器类似,需要时再详述。
原文:http://blog.csdn.net/shaqoneal/article/details/16831349
相关推荐
iphone开发基础UITabBar和UINavigation搭建简单应用,适合初学者,学习tabbar和navigation,这里练习两者组合搭建一个简单的常见应用例子, 其实普通应用也就是tabbar作为根视图,每个tab又是一个navigation的根...
UITabBar和UINavigation组合使用
斯坦福大学ios7课程第六课“Polymorphism with controllers, UINavigation, UITabbar”的demo,实现文字格式的分析功能;
http://blog.csdn.net/riven_wn/article/details/46561383
UINavigation-SXFixSpace 导航栏按钮位置偏移的解决方案,兼容iOS7〜iOS13,可自定义间距 添加支持cocoapods, pod "UINavigation-SXFixSpace", "~> 1.2.4
iOS的导航控件就是在view的顶部封装好了返回按钮,点击返回按钮后自动返回上一个页面,具体请参http://www.erpgear.com/2012/0424/2281.html
在tabbar进行切换的时候,变化tabbar下面的UINavigationController。通过Notification,进行通知处理
自己定义的一款OC的BaseViewController,继承后,可方便的显示,隐藏导航,自定义导航,避免重复判断是否为ios7。
在iOS5.0以上版本,要想navigation bar上面也能显示木质图片,要更改“WoodUINavigationAppDelegate.m”文件的一段代码:[navigationController.navigationBar insertSubview:imageView atIndex:0];改成:...
IOS开发常见问题及常用技巧 1.升级到iOS 8.0 SDK以后,创建的新项目会带有LaunchScreen.xib文件作为App的启动界面,此时若不作任何设置就把基于8.0 SDK的App运行在7.0等版本的设备上,可能会出现应用不能全屏,为了解决...
但是国内的应用经常会遇到很多个性的设计,就比如说A push到 B,A可能有导航栏,但是B控制器要求导航栏是透明的,这样一来A和B由于共用同一个导航栏就会让整个切换操作不易管理,何况从iOS 7开始不仅仅是点击返回...
自定义UINavigation 包括背景图 按钮 支持 4.3 5.0 6.0 系统 ARC
pan手势实现右滑pop试图都功能,实现网易新闻都效果。
OC-UINavigation自定义导航栏
详情请看博客http://blog.csdn.net/ecjtuacm_yuewei/article/details/69400245
UINavigation 代码 IOS 导航栏 Demo
一行代码调用,实现左侧返回...适配了iOS 11。 由于UI效果不偏移,但是点击不准确的问题。所以借鉴了UINavigation-SXFixSpace里边的几个分类。 demo位置:https://github.com/zhaotao0617/ZTNavigationItem/tree/master
适用于UINavigation的Push和Pop动作 一行代码即可设置动画。 GitHub地址:https://github.com/mengxianliang/XLBubbleTransition
ios 导航控制器,细节展示按钮。导航控制器(UINavigationController)是iOS界面中重要的组成部分。一般来说导航控制器要结合TableView来使用。UINavigationController是构建分层应用的主要工具,他与...
UINavigation Image IOS 代码 TitleView