在storyboard的视图大小中 tabbarcontroller怎么写代码切换视图

查看: 2002|回复: 14
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
在Storyboard中用UITabBarController默认选的是第一个viewController,如何设置默认选中为任意一个
补充内容 ( 14:03):
我只知道用这个
[self.tabBarController setSelectedIndex:2];
设置,可是不知道要写在哪里,如何写
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华1在线时间1329 小时帖子主题UID66974积分37513技术分20340 资源分805 分享激情7145 博客好友记录相册
高级架构师
内阁大臣, 积分 37513, 距离下一级还需 12487 积分
UID66974积分37513
用代码修改tabBarController.selectedViewController=xxx
精华0在线时间874 小时帖子主题UID257920积分19846技术分8642 资源分1000 分享激情305 博客好友记录相册
UID257920积分19846
代码设置selectindex 也行,貌似storyboard中没有该设置
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
jas 发表于
代码设置selectindex 也行,貌似storyboard中没有该设置
我只知道用这个
[self.tabBarController setSelectedIndex:2];
设置,可是不知道要写在哪里,如何写
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
kangqijun 发表于
用代码修改tabBarController.selectedViewController=xxx
我只知道用这个
[self.tabBarController setSelectedIndex:2];
设置,可是不知道要写在哪里,如何写
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间874 小时帖子主题UID257920积分19846技术分8642 资源分1000 分享激情305 博客好友记录相册
UID257920积分19846
izealot 发表于
我只知道用这个
[self.tabBarController setSelectedIndex:2];
设置,可是不知道要写在哪里,如何写
viewdidload就行
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
jas 发表于
viewdidload就行
那是不行的
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间874 小时帖子主题UID257920积分19846技术分8642 资源分1000 分享激情305 博客好友记录相册
UID257920积分19846
izealot 发表于
那是不行的
我是说tabbarcontroller的viewdidload
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
jas 发表于
我是说tabbarcontroller的viewdidload
要本就没有这个
用Storyboard,是不用搞这个,拖进去就可以用的
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间256 小时帖子主题UID296163积分974技术分574 资源分0 分享激情31 博客好友记录相册
实习工程师
知县, 积分 974, 距离下一级还需 26 积分
UID296163积分974
izealot 发表于
要本就没有这个
用Storyboard,是不用搞这个,拖进去就可以用的
你新建一个tabbarcontroller的子类,在里面写这个方法
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
holycwind 发表于
你新建一个tabbarcontroller的子类,在里面写这个方法
早试过了无用
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间874 小时帖子主题UID257920积分19846技术分8642 资源分1000 分享激情305 博客好友记录相册
UID257920积分19846
izealot 发表于
早试过了无用
你要在storyboard把这个子类关联,要不然当然没用
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
jas 发表于
你要在storyboard把这个子类关联,要不然当然没用
关联了。我是这样的新建一个MyTabBarController让它继承UITabBarController,完了在Storyboard中的custom class中指定class为MyTabBarController这个
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
精华0在线时间874 小时帖子主题UID257920积分19846技术分8642 资源分1000 分享激情305 博客好友记录相册
UID257920积分19846
izealot 发表于
关联了。我是这样的新建一个MyTabBarController让它继承UITabBarController,完了在Storyboard中的custom&&...
你把设置的那个源码&&考上来我看看
精华0在线时间62 小时帖子主题UID274794积分761技术分195 资源分59 分享激情83 博客好友记录相册
实习工程师
知县, 积分 761, 距离下一级还需 239 积分
UID274794积分761
jas 发表于
你把设置的那个源码&&考上来我看看
是不能这样写& & self.tabBarController.selectedIndex=2;
得这样& & self.selectedIndex=2;
(48.98 KB, 下载次数: 0)
13:04:39 上传
下载次数: 0
个人简介:具有丰富的管理和专业技术经验和能力,具有相当的素质和能量。人无完人,术业有专攻,常常自比小诸葛,任何单位企业,得我者可以得天下。没有实力不会乱说!没有刘备那种三顾茅庐的素质的企业家,请回避!
二级精英勋章
二级精英勋章
三级英豪勋章
三级英豪勋章
四级英才勋章
四级英才勋章
五级至尊勋章
五级至尊勋章
六级尊贵勋章
六级尊贵勋章
七级卓越勋章
七级卓越勋章
八级荣誉勋章
八级荣誉勋章
九级光辉勋章
九级光辉勋章
十级贡献勋章
十级贡献勋章
DEVDIV博主
DEVDIV人才
及时将最新信息发给我
通过Email及时将最新的模板和服务发给我。
及时了解我们最新动态。关注我们的微博
官方微博: &&&iOS开发――代码生成TabBar与视图切换详解
我在之前多篇博客中讲解了在不使用storyboard而使用nib文件的情况下,使用代码生成导航栏并进行跳转,具体可以参考《iOS开发&&界面跳转与返回及视图类型详解》《iOS纯代码实现界面建立、跳转、导航栏(无storyboard、无nib)(Objective-C)》。今天我来讲解下在使用nib搭建界面的情况下,用代码生成TabBar,并进行界面之间的跳转。代码示例已经上传至:/chenyufeng1991/TabBarTest 。
(1)在该示例中,Navigation和TabBar都会通过代码来实现,所以需要在AppDelegate中初始化设置如下:其中RootViewController是在后面定义的一个根视图。
#import &AppDelegate.h&
#import &RootViewController.h&
@interface AppDelegate ()
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
//声明根视图;
RootViewController *root = [[RootViewController alloc]init];
self.window.rootViewController =
[self.window makeKeyAndVisible];
return YES;
(2)RootViewController定义了根视图,在这里定义了页面的Navigation和TabBar。这是我们第一个看到的视图。
#import &RootViewController.h&
#import &FirstViewController.h&
#import &SecondViewController.h&
@interface RootViewController ()
//声明TabBar
@property (nonatomic,strong)UITabBarController *tabBarC
@implementation RootViewController
- (void)viewDidLoad
[super viewDidLoad];
UITabBarController *tabBarController = [[UITabBarController alloc]init];
tabBarController.delegate =
把两个界面加入到根视图中;
两个界面也分别要导航栏;
FirstViewController *firstVC = [[FirstViewController alloc]init];
UINavigationController *firstNav = [[UINavigationController alloc]initWithRootViewController:firstVC];
firstNav.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:0];
SecondViewController *secondVC = [[SecondViewController alloc]init];
UINavigationController *secondNav = [[UINavigationController alloc]initWithRootViewController:secondVC];
secondNav.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1];
//通过数组存储;
tabBarController.viewControllers = [NSArray arrayWithObjects:firstNav,secondNav, nil];
self.tabBarController = tabBarC
[self.view addSubview:tabBarController.view];
(3)TabBar的第一个Tab实现如下,我这里通过一个按钮以push方式跳到另一个页面(也会出现导航栏和TabBar)。
#import &FirstViewController.h&
#import &First02ViewController.h&
@interface FirstViewController ()
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @&1111&;
- (IBAction)buttonPressed:(id)sender {
//通过push跳到另一个界面;
First02ViewController *first02 = [[First02ViewController alloc] init];
[self.navigationController pushViewController:first02 animated:true];
(4)在上述push到另一个界面后,可以使用导航栏自带的&返回&按钮返回,也可以通过pop返回:
#import &First02ViewController.h&
@interface First02ViewController ()
@implementation First02ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @&新闻&;
- (IBAction)backButtonPressed:(id)sender {
//通过pop返回到push过来的界面;
[self.navigationController popViewControllerAnimated:true];
(5)在第二个Tab中,我通过点击按钮以Modal方式跳转到另一个页面(该页面没有导航栏,没有TabBar)。
#import &SecondViewController.h&
#import &Second02ViewController.h&
@interface SecondViewController ()
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @&2222&;
- (IBAction)buttonPressed:(id)sender {
//通过modal方式跳转,跳过去后的界面没有导航栏;
Second02ViewController *second02 = [[Second02ViewController alloc] init];
[self presentViewController:second02 animated:true completion:nil];
然后通过dismiss返回。
#import &Second02ViewController.h&
@interface Second02ViewController ()
@implementation Second02ViewController
- (void)viewDidLoad {
[super viewDidLoad];
- (IBAction)backButtonPressed:(id)sender {
//通过dismiss返回modal过来的界面;
[self dismissViewControllerAnimated:true completion:nil];
直接看上面的代码可能有点乱,你可以通过源代码运行后查看。这个也可以作为界面的架构直接使用,但是如果你想用storyboard来开发,也是极为方便的。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
悠悠电台,NJ的乐园
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
应用场景: &顶部一个segment,切换视图分别是表格,趋势图...等等。如果全部视图放在一个controller内,代码量太大,且不好维护。所以将切换视图分别定义在各自的viewController中,实现类似UITabBarViewController的效果。
解决办法:定义一个主视图,利用addChildViewController来组织内容viewController,同时添加自定义UITabBar,实现内容切换。
具体流程:
1.自定义UITabBar:自定义一个view(添加items,并定义delegate);
2.定义主视图:MainViewController:& & . 添加自定义的 UITabbar;& & . 通过addChildViewController 添加所包含的子视图控制器 (viewController);&& & . &实现tabbar的委托方法,用来切换 controller,&& & . &ViewController 切换后, View也会自动加载到 ViewController 上来。&& & . &View 是与 ViewController关联的。 在对应的ViewController.m 文件中, 通过 【self.view &addSubView ...】 实现View 的展示;&& & . &如果既不用xib,也不用 storyboard, 就是活生生的编码方式来添加View,这样就会频繁地调用 addTarget 方法。 从本质上说,就是把IBOutlet 和 IBAction ,通过编码的方式实现一遍。&& ViewController的切换方法如下:&[self
transitionFromViewController:currentViewController
toViewController:homePage duration:0&
options:UIViewAnimationOptionTransitionNone
animations:^{& & & & & & } completion:^(BOOL finished) {& & & & & & & & if (finished) {& & & & & & & & & & currentViewController=homeP& & & & & & & & }else{& & & & & & & & & & currentViewController=oldViewC& & & & & & & & }& & & & & & }];&小结:通过 addChildViewController 方法,将ViewController 与 View 关联起来,有了这个思路, 再来揣摩 新闻客户端框架,理解起来就容易多了。
阅读(6377)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'iOS: 通过addChildViewController实现 Segment 下的 View 的切换',
blogAbstract:'通过segment &来切换View,是 App 开发中经常遇到的需求。实现方法有多种。这里要讲述的是,通过addChildViewController来组织ViewController,从而实现View 的切换。\n\n\n\n\n\n\n\n应用场景: &顶部一个segment,切换视图分别是表格,趋势图...等等。如果全部视图放在一个controller内,代码量太大,且不好维护。所以将切换视图分别定义在各自的viewController中,实现类似UITabBarViewController的效果。\n',
blogTag:'ios,addchildviewcontroll,segment',
blogUrl:'blog/static/6',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:4,
permalink:'blog/static/6',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'悠悠电台,NJ的乐园',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}iOS如何隐藏子页面底部bottomTabBar?push你懂的-ios8-手机开发-壹聚教程网iOS如何隐藏子页面底部bottomTabBar?push你懂的
如何你还不知道在IOS中如何隐藏子页面底部bottomTabBar,那么现在本文就来告诉你如何使用push这个东西。
以下两种情况是我在开发过程中遇到的,一种是代码使用pushViewController,另一种是storyboard直接使用push。之前也查阅了很多关于隐藏底部tabbar的资料,但是要么使用起来麻烦,要么就是藕合度高代码不规范(这里有点代码洁癖,当前类相关的事务应该写在本类中)。
1、使用pushViewController
如A-&B;A是列表页,带有tabbar;B是内容页,不需要tabbar;
在A的事件中打开B,如下代码
-(void)showVideo:(EJAlbumModel *)model bySId:(NSString *)sid{
NSLog(@&%@&,@&执行委托&);
EJClassVideoViewController *videoController=[[EJClassVideoViewController alloc] init];
videoController.model=
videoController.semesterClassId=
self.navigationItem.backBarButtonItem=[[UIBarButtonItem alloc] initWithTitle:@&返回& style:UIBarButtonItemStyleBordered target:nil action:nil];// 修改下级页面的返回按钮,此处我是很想写到videoController中,但是backBarButtonItem的机制决定必须写在A中;
[self.navigationController pushViewController:videoController animated:YES];
在B的加载View视图事件initWithNibName中,加入 self.hidesBottomBarWhenPushed=YES;即可实现打开B隐藏tabbar,返回A重新现实tabbar;很简单吧
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.hidesBottomBarWhenPushed=YES;
2、使用storyboard
在storyboard中建立A和B,并使用ctrl+链接至B,即segue的打开方式;如下图所示:
此处只需要在可视化视图中修改B的一个属性即可(可惜很多技术文章都没提到这点,是因为我没有找到吗),如下图,选中B视图,并勾选Hide Bottom Bar on P
上一页: &&&&&下一页:相关内容你的位置: >
> UITabBarController通过代码实现跳转到指定的view 【原创】
最近在弄推送,现在推送能收到了,但是当点击推送过来的消息时,如何按照客户要求跳转到相依的view呢?
在AppDelegate里的“- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions”拖线跳转的话当然可以,但是这个方法只会在程序刚开始启动的时候才会调用一次。
当程序有后台进入前台的时候是不会调用这个方法的。收到通知后主要还是在AppDelegate里来完成view跳转的。如果在AppDelegate其他方法里直接拖线,用“performSegueWithIdentifier”的话会出现层次逻辑错误的报错。
这是storyBoard上的局部构架图。
view的入口是UITabBarController,比如客户要求收到通知后点击通知,跳转到“促销专区”,如何实现呢?
直接从UITabBarController拖线指向“促销专区”肯定不行,因为下面的tabBar不会跟着一起过去。而且更严重的是即使跳过来了也永远无法返回到主界面了,如果你再拉线回到主界面你只能正常回一次,第二回主界面会报错,至于为什么我也暂时没研究了。试了各种方法,现在来总结下代码跳转view的步骤。
首先最重要的三句代码
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@&Main& bundle:nil];//TabBarController
UITabBarController *firstView = [storyboard instantiateViewControllerWithIdentifier:@&TabBarController&];
self.window.rootViewController = firstV
第一句代码:storyboard是将你的Main.storyboard实例化,
然后在storyboard里把你的TabBarController的storyboard ID设置一下,我设置的是“TabBarController”
第二句代码:就是把storyboard中ID为“TabBarController”的UITabBarController变成名为“firstView”的对象。
第三句代码:把我们实例化的firstView设为我们的rootViewController,这三句是最主要的。
firstView是你即将跳转view的起点
收到通知后,后台处理通知的方法是“- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo”,当然,在“- (void)applicationWillEnterForeground:(UIApplication *)application”或者“- (void)applicationDidBecomeActive:(UIApplication *)application”这些程序由后台到前台会被调用的方法都可以插入。
我的firstView下面有四个item,程序运行时默认进入最左边的那个item,
并且我把第一个item对应的view绑定到了一个名为“IndexViewController”的类,当上面的三句代码执行完后会自动进入到“IndexViewController”的UIViewController,这时我们只要在UIViewController中的“viewDidLoad”或者“viewDidAppear”之类的方法中加入我们要跳转的view就可以了。
这是storyboard中“汽配宝典”指向“促销专区”的segue
到这里就基本上完成了,至于在AppDelegate里通过哪个方法触发事件就看你放在哪个方法里了,不建议放在“applicationDidBecomeActive”,因为第一次运行会卡住,后台之后再前台久好了,建议放在“applicationWillEnterForeground”里。
现在收到推送来的通知之后,点击你的通知,程序开始由后台到前台,触发“applicationWillEnterForeground”里的三句代码,然后自动进入“IndexViewController”的UIViewController,接着在“viewDidLoad”中立即触发“[self performSegueWithIdentifier:@”index2promotion” sender:self];”,就跳转过去了。
本文永久地址:/3418.html本文出自
,转载时请注明出处及相应链接。
与本文相关的文章

我要回帖

更多关于 controller层怎么写 的文章

 

随机推荐