`
shuai1234
  • 浏览: 978093 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

Iphone开发(八)利用Tabbed Application模板实现多视图切换

 
阅读更多

holydancer原创,如需转载,请在显要位置注明:

转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7417030

 

在android中我们一般用intent意图来在各个view之间跳转,在以前的ios开发中,如果要实现选项卡切换多视图,需要用到一个现在Xcode版本中没有的模板Window-Based Application模板,然后在里面建一堆的viewController和xib文件,然后再一顿的猛连,新手到这里往往会很痛苦。现在好了,新版的Xcode中的Tabbed Application模板可以简单明了的创建一个选项卡多视图,甚至我们都不需要任何操作。

下面我们先打开Xcode,然后选择该模板创建项目:

创建成功后直接运行就会在虚拟机上出现一个选项卡(两个选项),点击就会切换不同的view;

 

现在我们来分析一下这个模板,了解后我们就可以利用该模板来创建我们自己的应用了。

首先该模板并没有主xib文件,所以我们要去AppDelegate中查看是如何代码生成的,在该类的声明中我们发现如下代码:

AppDelegate.h:

 

[plain] view plaincopy
 
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>  
  4.   
  5. @property (strong, nonatomic) UIWindow *window;  
  6.   
  7. @property (strong, nonatomic) UITabBarController *tabBarController;  
  8.   
  9. @end  


UIWindow下面就是一个UITabBarController,这里并不是我们常见的viewController,而是一个UIViewController的子类。该类的声明如下:

 

 

[plain] view plaincopy
 
  1. UIKIT_CLASS_AVAILABLE(2_0) @interface UITabBarController : UIViewController <UITabBarDelegate, NSCoding> {  
  2.   @package  
  3.     UITabBar               *_tabBar;  
  4.       
  5.     UIView                 *_containerView;  
  6.     UIView                 *_viewControllerTransitionView;  
  7.   
  8.     id                      _tabBarItemsToViewControllers;  
  9.     UIViewController       *_selectedViewController;  
  10.   
  11.     UINavigationController *_moreNavigationController;  
  12.     NSArray                *_customizableViewControllers;  
  13.       
  14.     id<UITabBarControllerDelegate> _delegate;  
  15.       
  16.     UIViewController       *_selectedViewControllerDuringWillAppear;  
  17.           
  18.     UIViewController       *_transientViewController;  
  19.       
  20.     NSUInteger              _maxItems;  
  21.       
  22.     struct {  
  23.     unsigned int isShowingMoreItem:1;  
  24.     unsigned int needsToRebuildItems:1;  
  25.     unsigned int isBarHidden:1;  
  26.     unsigned int editButtonOnLeft:1;  
  27.     } _tabBarControllerFlags;  
  28. }  


从上面我们可以发现,该控制器是自带一个UITabBar的,而且里面是有UIViewController作为属性的。现在我们来看AppDelegate的实现:

 

AppDelegate.m:

 

[plain] view plaincopy
 
  1. #import "AppDelegate.h"  
  2.   
  3. #import "FirstViewController.h"  
  4.   
  5. #import "SecondViewController.h"  
  6. #import "ThirdViewController.h"  
  7.   
  8. @implementation AppDelegate  
  9.   
  10. @synthesize window = _window;  
  11. @synthesize tabBarController = _tabBarController;  
  12.   
  13. - (void)dealloc  
  14. {  
  15.     [_window release];  
  16.     [_tabBarController release];  
  17.     [super dealloc];  
  18. }  
  19.   
  20. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  21. {  
  22.     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];//1  
  23.     // Override point for customization after application launch.  
  24.     UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];//2  
  25.     UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];//3  
  26.       
  27.    // UIViewController *viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil] autorelease];//4  
  28.       
  29.     self.tabBarController = [[[UITabBarController alloc] init] autorelease];//5  
  30.     self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3,nil];//6  
  31.     self.window.rootViewController = self.tabBarController;//7  
  32.     [self.window makeKeyAndVisible];//8  
  33.     return YES;  
  34. }  
  35.   
  36.   
  37. @end  


没用到的方法被我删掉,现在主要来看应用初始化方法

 

代码1初始化窗口;

代码2初始化view1的控制器;

代码3初始化view2的控制器;

代码4是我自己后来加的,这里先不管;

代码5初始化根视图控制器(这时只是一般的视图控制器);

代码6将那两个视图的控制器添加为数组给了根视图控制器的viewControllers属性,以便显示;

代码7将根视图器转正(真正成为根视图控制器);

代码8显示窗口;

另外,选项卡上的选项文字和图标是在每一个view的viewController初始化方法里确定的,比如:

FirstViewController.m:

 

[plain] view plaincopy
 
  1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  2. {  
  3.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  4.     if (self) {  
  5.         self.title = NSLocalizedString(@"First", @"First");  
  6.         self.tabBarItem.image = [UIImage imageNamed:@"first"];  
  7.     }  
  8.     return self;  
  9. }  

 

[plain] view plaincopy
 
  1. self.title = NSLocalizedString(@"First", @"First");  

上面这行代码是给标题,NSLocalizedString方法只是一个宏定义,第二个参数无用,你也可以直接self.title = @"First”这样来赋值。

 

好了,上面这些模板是系统给我们的,包括图标素材,我们也大概了解了是怎样添加view到应用里和选项卡上的选项对应,我们现在来手动再添加一个view

首先,新建一个viewController,取名为ThirdViewController,注意附带xib文件。

然后在xib文件中拖上一个segmented控件(随便什么都行),将Bottom Bar那一栏修改为Tab Bar用以为选项卡留出位置(好习惯),如下图

在ThirdViewController.m中初始化方法中设置选项名和图标:

 

[plain] view plaincopy
 
  1. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil  
  2. {  
  3.     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];  
  4.     if (self) {  
  5.           
  6.         self.title=@"自定义的";  
  7.   
  8.         self.tabBarItem.image = [UIImage imageNamed:@"second"];  
  9.         //这里我们就用和第二个一样的图片  
  10.   
  11.     }  
  12.     return self;  
  13. }  



 

现在将AppDelegate文件在原来的基础上做如下修改:

1,导入新建类ThirdViewController的头文件;

2,将该类实例化,对象名按惯例取名为viewController3;

3,将实例化后的viewController3加到数组里。

 

[plain] view plaincopy
 
  1. #import "AppDelegate.h"  
  2.   
  3. #import "FirstViewController.h"  
  4.   
  5. #import "SecondViewController.h"  
  6. #import "ThirdViewController.h"//新增  
  7.   
  8. @implementation AppDelegate  
  9.   
  10. @synthesize window = _window;  
  11. @synthesize tabBarController = _tabBarController;  
  12.   
  13. - (void)dealloc  
  14. {  
  15.     [_window release];  
  16.     [_tabBarController release];  
  17.     [super dealloc];  
  18. }  
  19.   
  20. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  21. {  
  22.     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
  23.     // Override point for customization after application launch.  
  24.     UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];  
  25.     UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];  
  26.       
  27.     UIViewController *viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil] autorelease];//新增  
  28.       
  29.     self.tabBarController = [[[UITabBarController alloc] init] autorelease];  
  30.     self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3,nil];//添加  
  31.     self.window.rootViewController = self.tabBarController;  
  32.     [self.window makeKeyAndVisible];  
  33.     return YES;  
  34. }  
  35.   
  36.   
  37. @end  


好了,见证奇迹吧:

 

这时我们就实现了在系统模板的基础上添加view,也可以修改原有的,这样就可以很简单的在多个视图之间进行切换,so easy。

 

关键字:Iphone ,IOS ,Iphone开发 ,基础 ,选项卡栏  ,UITabBar ,多视图切换 ,自定义多视图切换 

分享到:
评论

相关推荐

    基于iOS的应用开发模板

    Tabbed App模板则提供了多个标签页的框架,适合复杂的视图切换场景;而Master-Detail App模板则适合展示列表和详细信息的应用,如邮件应用。 开发者在创建新项目时,可以根据应用的具体需求选择合适的模板,并在此...

    iphone开发基础教程(源代码)

    这些模板包括Single View Application(单视图应用)、Tabbed Application(标签页应用)和Master-Detail Application(主从详情应用)等。每个模板都为特定类型的应用提供了一个基础结构。 接下来,你将深入学习UI...

    Visual Studio Csharp 开发Android 之Tabbed Layouts

    在Android应用开发中,Tabbed Layouts是一种常见的用户界面设计,它允许用户通过标签页来切换不同的内容区域。本教程将聚焦于如何使用Microsoft的Visual Studio集成开发环境(IDE)和C#语言来构建Android应用中的...

    RecyclerView和Tabbed Activity的布局与实现

    通过android studio实现RecyclerView和Tabbed Activity与点击事件

    从零开始学iOS7开发系列3-我的地盘我做主-Cha61

    总之,这个系列教程的这一部分介绍了如何开始一个基础的iOS项目,包括设置项目信息,理解Tabbed Application模板,以及如何利用Core Location框架获取地理位置信息。随着学习的深入,你将逐渐掌握更多iOS开发的核心...

    iOS游戏开发:从创意到实现+第1章:Xcode简介

    - **Tabbed Application**:此模板提供了一个位于屏幕底部的标签栏,适用于需要多个视图切换的应用场景。 #### 五、深入探索Xcode 除了以上提到的基本操作外,Xcode还提供了丰富的功能和工具来帮助开发者更高效地...

    网站模板, 适用于JAVA修改, 实现动态开发

    本压缩包文件“网站模板, 适用于JAVA修改,实现动态开发”显然是为Java开发者量身定制的,旨在帮助他们更高效地进行动态网站的开发工作。下面我们将深入探讨其中涉及的关键技术与知识点。 首先,提到“prototype...

    Empty Application_XL

    在iOS或macOS开发过程中,通常会使用Xcode内置的多种模版来快速创建新项目,比如Single View Application、Tabbed Application等。然而,这些模版都包含了一些默认的功能和文件,对于某些希望从零开始构建应用,或者...

    ios7版 30天精通iPhone手机编程

    - **Tabbed Application**:实现标签页导航,包含导航控制器和标签栏。 - **Utility Application**:用于实用工具类应用,主次视图有不同的呈现方式。 - **Empty Application**:空白模板,开发者需自行添加视图...

    tabbed postman.rar

    **Postman:强大的API测试与开发工具** Postman是一款广泛使用的API开发、测试和文档工具,它极大地简化了API的工作流程。在这个“tabbed postman.rar”压缩包中,我们聚焦于网页版的Postman,这是一款功能丰富的...

    IOS空应用模板

    在Xcode中,当你选择创建一个新的项目时,会看到多种模板可供选择,如Single View App(单视图应用)、Tabbed App(标签页应用)和Game等。而“空应用模板”(Empty Application)则是一个最基础的选项,它仅包含...

    javascript实现的Mini Tabbed Pages雅虎TAB效果源码

    在本项目中,“Mini Tabbed Pages”是利用JavaScript实现的一种类似雅虎TAB效果的用户界面元素。这种效果常见于网站的导航菜单,允许用户在多个相关页面或内容之间切换,而无需刷新整个页面,提供了更好的用户体验。...

    Xcode7 空白模板

    不同于其他预设包含特定功能的模板,如Single View Application或Tabbed Application,空白模板不包含任何预先设定的代码或界面元素,仅提供基本的项目结构,使开发者有更大的自由度去构建自己的应用框架。...

    Python库 | ftw.tabbedview-3.5.0.tar.gz

    总的来说,ftw.tabbedview是一个强大的工具,它使得Python开发者能够快速构建具有多标签界面的应用,提高了开发效率,同时也提升了用户界面的友好性和可用性。对于那些对Python GUI编程感兴趣的开发者来说,ftw....

    android studio内置的各中模版页面

    4. **Tabbed Activity**:该模板创建了一个带有底部导航条的Activity,可以轻松实现多个页面间的切换,每个标签页对应一个Fragment。 5. **Master/Detail Flow**:适用于平板设备或大屏幕,它创建了主-详情的布局...

    mini-tabbed-pages

    "mini-tabbed-pages"是一个关于创建网站Tab切换功能的代码资源。Tabbed界面设计在网页设计中非常常见,它能够有效地组织和展示大量信息,提高用户体验。这种设计允许用户通过不同的选项卡在多个内容面板之间切换,而...

    oracle ADF Tabbed

    在Oracle ADF中,“tabbed”通常指的是TabbedPane组件,这是一个用户界面元素,允许用户在多个选项卡之间切换,每个选项卡代表一个独立的功能或视图。这种设计模式在现代应用程序中非常常见,因为它可以有效地组织和...

    Android开发

    - **视图结构**:两种开发方式均提供了不同的视图结构,如Flex Mobile中的ActionBar、TabbedView等,以及ViewNavigator结构中的pushView()和popView()方法,用于实现视图的切换。 - **UI组件**:Android SDK提供了...

    3-9(Tab-Tabbed-menu).zip_Tabú

    在安卓应用开发中,Tab-Tabbed Menu 是一个常见的用户界面设计模式,它允许用户通过在顶部或底部的标签之间切换来浏览不同的内容区域。在本案例“3-9(Tab-Tabbed menu).zip_Tabú”中,我们将会探讨如何在Android...

Global site tag (gtag.js) - Google Analytics