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

Android TabActivity实现多页显示效果 NULL 博文链接:https://158067568.iteye.com/blog/941338 立即下载

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

转自holydancer的优快云专栏,原文地址:http://blog.youkuaiyun.com/holydancer/article/details/7417030


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

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


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



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

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

AppDelegate.h:

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UITabBarController *tabBarController;

@end

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

UIKIT_CLASS_AVAILABLE(2_0) @interface UITabBarController : UIViewController <UITabBarDelegate, NSCoding> {
  @package
    UITabBar               *_tabBar;
    
    UIView                 *_containerView;
    UIView                 *_viewControllerTransitionView;

    id                      _tabBarItemsToViewControllers;
    UIViewController       *_selectedViewController;

    UINavigationController *_moreNavigationController;
    NSArray                *_customizableViewControllers;
    
    id<UITabBarControllerDelegate> _delegate;
    
    UIViewController       *_selectedViewControllerDuringWillAppear;
        
    UIViewController       *_transientViewController;
    
    NSUInteger              _maxItems;
    
    struct {
	unsigned int isShowingMoreItem:1;
	unsigned int needsToRebuildItems:1;
	unsigned int isBarHidden:1;
    unsigned int editButtonOnLeft:1;
    } _tabBarControllerFlags;
}

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

AppDelegate.m:

#import "AppDelegate.h"

#import "FirstViewController.h"

#import "SecondViewController.h"
#import "ThirdViewController.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize tabBarController = _tabBarController;

- (void)dealloc
{
    [_window release];
    [_tabBarController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];//1
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];//2
    UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];//3
    
   // UIViewController *viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil] autorelease];//4
    
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];//5
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3,nil];//6
    self.window.rootViewController = self.tabBarController;//7
    [self.window makeKeyAndVisible];//8
    return YES;
}


@end

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

代码1初始化窗口;

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

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

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

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

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

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

代码8显示窗口;

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

FirstViewController.m:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = NSLocalizedString(@"First", @"First");
        self.tabBarItem.image = [UIImage imageNamed:@"first"];
    }
    return self;
}

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

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

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

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

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

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        
        self.title=@"自定义的";

        self.tabBarItem.image = [UIImage imageNamed:@"second"];
        //这里我们就用和第二个一样的图片

    }
    return self;
}


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

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

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

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

#import "AppDelegate.h"

#import "FirstViewController.h"

#import "SecondViewController.h"
#import "ThirdViewController.h"//新增

@implementation AppDelegate

@synthesize window = _window;
@synthesize tabBarController = _tabBarController;

- (void)dealloc
{
    [_window release];
    [_tabBarController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
    UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
    
    UIViewController *viewController3 = [[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil] autorelease];//新增
    
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, viewController3,nil];//添加
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}


@end

好了,见证奇迹吧:

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


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

tabbed_view:受经典的桌面样式选项卡组件启发的小部件 tabbed_view Flutter小部件的灵感来自经典的桌面样式选项卡组件。 支持可定制的主题。 TabbedView呈现模型的表示。 TabbedViewModel将选项卡数据存储为名称,内容,按钮或任何动态值。 开始吧 默认主题为TabbedViewTheme.light() 。 List < TabData> tabs = []; for ( var i = 1 ; i < 7 ; i ++ ) { Widget tabContent = Center (child : Text ( 'Content $ i ' )); tabs. add ( TabData (text : 'Tab $ i ' , content : tabContent)); } TabbedWiew tabbedView = TabbedWi 立即下载

相关推荐

RecyclerView和Tabbed Activity的布局与实现

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

Android开发UI之Fragment-Tabbed Activity的使用

使用ADT新建的时候,可以选择Tabbed Activity,选择新建一个工程。 新建的工程中,选择不同的Tab页显示不同的内容,主要是通过SectionsPagerAdapter类中的Fragment getItem(int position)方法实现的。 Tabbed Activity快速使用: 1.假如是3个Tab页,在工程中新建三个Fragment,显示想要显示的内容 2...

diaolapei9880的博客 841

套用并修改Android Studio模板Tab activity(toolbar+tab+viewpager)

根据Android studio提供的Tabbed Activity模板创建项目并进行稍微修改。 顶部是toolbar,中间是TabLayout,底部是viewpager

#Android学习#Fragment简单基础——Tabbed Activity使用

Android Studio提供了很多建立不同Activity的方法,为我们开发带来了极大的方便。 今天学习了Fragment的使用方法,Fragment相对于Activity来说,切换起来会比较方便,并且性能也比Activity好,如果一个应用内的页面切换,采用Fragment是一个不错的方法。 首先,了解一下Fragment的生命周期,Fragment比起Activity多了几个阶段,但很多时

Cyfloel的博客 1万+

看不懂分子动力学模拟的结果?一文读懂RMSD曲线

随后,将每一帧结构与初始模板进行叠合,计算对应原子的平均偏移量,即RMSD。总之,掌握 RMSD 的解读方法,就等于抓住了评估分子动力学模拟成败与质量的“总开关”。①在模拟初始阶段,RMSD会从0迅速上升,这是蛋白质从静态晶体或模型结构释放到溶液环境中并逐渐适应的正常过程。②经过一段时间后,曲线不再系统性上升或下降,而是围绕一个平均值,小幅度地上下波动,形成一个稳定的“平台”。这种情况下,RMSD 在初始快速上升后,并未进入平台,而是持续甚至加速上升,始终未见收敛。🔍 如何解读不同趋势的RMSD曲线。

weixin_46587777的博客 4888

Codesys—Modbus RTU称重变送器通讯案例

Codesys控制器使用标准的Modbus库,与支持ModbusRTU的称重变送器进行通讯的案例

原来你也__的博客 2739

用XCODE开发Tabbed Application

Tabbed Application入门-创建工程 -选择Tabbed Application -设置工程名及语言,这里选择Object-C -工程的初始页面,直接运行即可看到效果 -添加Tab bar Controller 从右下侧将“Tab Car Controller”拖到下图的第二列,松开鼠标,添加完成 同时会添加“Item 1 Scene” 和“Item 2 Scenne”,并建好

climber专栏 1742

Anylabeling与SAM协同:从智能标注到YOLO数据集构建的完整实践

本文详细介绍了Anylabeling与SAM协同标注的完整实践,从智能标注到YOLO数据集构建的全流程。通过结合SAM的自动分割能力和Anylabeling的交互式标注,显著提升标注效率,特别适合小样本、复杂形状和多类别标注场景。文章还提供了环境搭建、标注优化技巧以及YOLO格式转换的实用指南。

weixin_26873711的博客 461

快速搭建 iOS Tab App

写在前面 本文使用的IDE为Xcode9.0 目的是搭建一个iPhone Tab View App框架 使用的语言为Objective-C 方法一:使用Xcode自带的Tabbed App模版 新建项目 ,选择iOS项目下的Tabbed App。点击后,取一个项目名,其他的设置不需要改变。 1.png 可以看到新建的项目里面,代码层已经有两个创建好的V...

CJJ的博客 303

pytorch中dataloader的num_workers参数

结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di

qq_40990057的博客 1万+

Java开发者必看:Apache PDFBox实现PDF数字签名完整指南(附源码)

本文为Java开发者提供了使用Apache PDFBox实现PDF数字签名的完整指南。详细介绍了从环境配置、核心原理到完整代码实现的全过程,涵盖证书管理、签名位置计算、性能优化及实际应用案例,并附有可直接复用的源码,帮助开发者高效集成PDF数字签名功能。

o1p2q3r的博客 339

ios开发—利用xcode tabbed模块快速开发标签栏应用

经典的ios 5橙子书中关于基于标签栏的应用开发采用空白模块的方式,书中给出的理由是:这样能使开发者对整个的应用流程有一个清晰的认识。但是在新版的xcode中已经提供了基于标签栏应用的模板,利用模板新建项目可以大大降低开发难度和时间。 首先是创建一个新项目,选择“tabbed application”选项。 创建成功并运行程序,可以看到该模板建立了一个有两个标签的标签栏

浣熊_BUPT 4180

作物生长模型Oryza V3实战10:运行文件参数详解

运行文件(.rer)用于批量模拟农业场景,包含多组参数集(Rerunset),每组设定独立的时间范围、灌溉施肥方案等,支持测试不同农艺措施效果。该文件可实现参数自动校准,通过多组参数组合迭代寻找最优值。模拟结果文件(res.dat)会记录全部测试时间段的数据,便于用户对比产量、水分利用率等指标,筛选最优方案或分析气候适应性策略。

209

iPhone开发【九】多视图技术总结之二:Tab Bar

转载请注明出处,原文网址:http://blog.youkuaiyun.com/m_changgong/article/details/8205170 作者:张燕广 最近很忙,但是仍然想坚持写完想写的内容,坚持! 实现的功能:通过Tab Bar,实现多视图切换。 关键词:多视图 Tab Bar 1、创建一个Empty Application工程,命名为:MultiView-Tab,如下

长弓的专栏 4031

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277

【CANdelaStudio编辑CDD】-21.2-创建OBD诊断$03,$07,$0A和$04服务以及OBD DTC

案例背景(共11页精讲):创建OBD诊断$03,$07,$0A和$04服务;以及OBD DTC。 在《【ISO15031_OBD诊断】-3.1-$03服务Request emission-related diagnostic trouble codes理论部分https://blog.youkuaiyun.com/qfmzhu/article/details/122157513》, 《【ISO15031_OBD诊断】-7.1-$07服务Request emission-related diagnostic trou

「汽车电子助手」的博客 1697

(二)swift TabbedApplication 内增加普通视图

Tab Bar Controller 新增一个 Item (UIViewController)单击选择 Main.storyboard ,Xcode 右下角 输入“UIviewController” 拖拽 第一个选项,放置于中央编辑区域。 Control+鼠标左键 建立Relationship ,弹出框内,选择 Relationship Segue -> view controllers 为这个新

steven的专栏 1990

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UITabBar的学习——TabbedApplication

首先,写这个,主要是便于整理自己学习的知识,记录一下,方便以后忘记了的时候可以回头看看。 先放效果图

u011300635的专栏 436

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TabbedActivity

实现了两种TabbedActivity(swipe Views (ViewHolder),Action Bar Tabs(with ViewPager))。

ava_1234的博客 1111

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

测试Android Studio自动生成Demo(Tabbed Activity)

Tabbed就是普通的ViewPager加Fragment,这个Demo主要处理页面风格一模一样的情况 总结Google提供的这几个自动创建的模板可以帮我们节省一点开发时间,但是还是有一定的局限性的,自己的基础打好可以自己创建比这个更好的模板。

heyiaiqing的博客 1941

[Android][App]Tabbed Activity 中的 key code: getItem()

今天的需求要用到Tabbed  Activity, 此组件 android 自带。 用于选择不同的 Tab 页显示不同的内容,在 getItem()中实现。 主要代码如下: /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/p...

champwang 578

关于xcode——tabbed

抛弃了创建xib文件添加标签页的方法,直接在故事板上添加新的标签页。 以下是参考网站。 http://www.2cto.com/kf/201303/196163.html http://blog.youkuaiyun.com/kmyhy/article/details/11472777 http://blog.youkuaiyun.com/nogodoss/article/details/3957

wuli_kiki的专栏 481

苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)

holydancer原创,如需转载,请在显要位置注明: 转自holydancer的优快云专栏,原文地址:http://blog.youkuaiyun.com/holydancer/article/details/9219333 更多内容访问:这里 概述: 苹果的证书繁锁复杂,制作管理相当麻烦,今天决定重置一个游戏项目中的所有证书,做了这么多次还是感觉很纠结,索性直接记录下来,日后你我他查...

holydancer的专栏 18万+
上一篇: Iphone开发(七)date picker 和 picker view,较复杂的控件
下一篇: Iphone开发(九)理解subView,手动实现多个视图切换
holydancer
博客等级 码龄15年 474粉丝 59原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值