怎么用view或者别的控件ios view覆盖导航栏部分Tabbar

主题 : 如何让一个VIEW遮住navigationBar和tabBar
级别: 新手上路
可可豆: 120 CB
威望: 132 点
在线时间: 137(时)
发自: Web Page
来源于&&分类
如何让一个VIEW遮住navigationBar和tabBar&&&
就是在程序第一次运行,会有一层view覆盖整个屏幕并且能遮住navigationBar和tabBar,view左上角有个按钮,按一下这层view消失,程序正常运行
图片:B5EAD6CFFC19E.jpg
级别: 骑士
可可豆: 1476 CB
威望: 1476 点
在线时间: 562(时)
发自: Web Page
在当前window上添加view
级别: 精灵王
UID: 123750
发帖: 1371
可可豆: 2582 CB
威望: 2534 点
在线时间: 897(时)
发自: Web Page
window上操作
级别: 骑士
UID: 159156
可可豆: 1286 CB
威望: 1006 点
在线时间: 713(时)
发自: Web Page
如果底部是UINavigationController,那么可以在self.navigationController.view addSubView:
We Can Manage!
级别: 禁止发言
UID: 363751
可可豆: 141 CB
威望: 136 点
在线时间: 12(时)
发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 论坛版主
UID: 38060
发帖: 137577
可可豆: 1373713 CB
威望: 1374130 点
在线时间: 2207(时)
发自: Web Page
self.navigationController.view或者window上加都可以,顺便说一下,这个截图是android的
有些人,你以为可以再见面有些事,你以为可以一直继续下去然而,也许在你转身的那个刹那有些人,你就再也见不到了有些事,也就不能再继续了当太阳落下,又升起来的时候一切都变了,一不小心就再也回不去了
级别: 侠客
UID: 318596
可可豆: 536 CB
威望: 385 点
在线时间: 345(时)
发自: Web Page
安卓。。。。。。
级别: 新手上路
UID: 44316
可可豆: 270 CB
威望: 265 点
在线时间: 154(时)
发自: Web Page
window上add
级别: 新手上路
UID: 305464
可可豆: 71 CB
威望: 102 点
在线时间: 78(时)
发自: Web Page
在 window上 add
级别: 新手上路
可可豆: 13 CB
威望: 3 点
在线时间: 44(时)
发自: Web Page
盖上一层window 然后在window上面加view
勤学不适合,只能慢学
关注本帖(如果有新回复会站内信通知您)
4*5+2 正确答案:22
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版用Swift完成不同View Controller之间的切换
之前用objective-c开发时,页面之间的切换很容易。其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了。
今天在实验开发一个简单的小程序时,却遇到了一些bug,后来还是求助stackoverflow上的大神解决了问题,在此做下记录。
我的程序结构是这样的,在一个页面A中有个按钮,然后点击按钮以后,切换到另一个页面B。A和B都在同一个storyboard中。
这里先说下通用的方法:
手动用代码建好的view controller,即不是在storyboard中建立的:
var vc = ViewController()
self.presentViewController(vc, animated: true, completion: nil)
在storyboard中建立的可以用下面的代码:
let sb = UIStoryboard(name:"Main", bundle: nil)
let vc = sb.instantiateViewControllerWithIdentifier("tabBarController") as ViewController
self.presentViewController(vc, animated: true, completion: nil)
这里的tabBarController 是你在storyboard中对相应的viewcontroller打开其identifier inspector,然后对其storyboard ID起的名字。
所以我的程序就是,在A的类中,定义下面的button action:
@IBAction func login(sender: UIButton) {
let sb = UIStoryboard(name: "Main", bundle: nil)
let vc = sb.instantiateViewControllerWithIdentifier("tabBarController") as UITabBarController
self.presentViewController(vc, animated: true, completion: nil)
}注意我这里as后并没有写成ViewController,bug就出现在这里。当我最初写的是viewController时,总会出bug,提示这样:
我Google了关于dynamic Cast Class Unconditional也没有找到太多有用的信息,没有办法只有求助stackoverflow的大神了,很快就有人回复:
原来是因为我从storyboard读到的被命名为tabBarController的控件不能被强制转换(as)成viewcontroller,因为它其实是一个UITabBarController,也就是说,as后面你想要强制转换成的一定要与storyboard中的保持一致。
所以,代码就那么几行,但是不能生搬硬套。
如果你的storyboard中是viewcontroller,就as成viewcontroller,如果是UITabBarController就as成为UITabBarController,如果是其它的诸如UITableViewController,你知道怎么做。
(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'&&国之画&&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!ma_haile 的BLOG
用户名:ma_haile
文章数:38
评论数:25
访问量:566499
注册日期:
阅读量:5863
阅读量:12276
阅读量:331130
阅读量:1037783
51CTO推荐博文
目标: ios TabbarController 组件的使用
程序效果 如图 :
TabBarController 是一个菜单组件
TabBarController 组件在ios 程序中经常看到 ,是一个比较常用的组件
TabBarController 幕中最多只可以放置5个,如果超过5个系统会自动生成一个More按钮
下面各位童鞋一起来做一遍
启动Xcode 创建一个新的ios Application& 模板选择 Empty Application 点击下一步
在项目信息中 项目名称 填写 &TabBarControllerDemo& class Prefix 前缀名 填写为 &Tabbar&&& 因为我们是开发 iphone程序 所以 Device Family 项选择 iphone 下面复选全部不选中。 && 如图:
点击下一步 ,选择保存位置,点击创建 ,此时我们的 项目没有一个视图文件的喔 。没事 我们创建一个xib文件&& 选中项目& 右键& -》 new file -》 ios -》user interface -》empty 点击next 保存文件名 为 &TabBarViewController& 然后创建
打开此xib 文件到此时 改xib 里面是没有任何元素的, 我们为此xib 文件添加一个 Tab Bar Controller 组件 如下图:
从上图中我们可以看出 TabBarController 已经默认给我们添加了 两个菜单按钮了,那我们如果让该 xib 显示呢 ,我们还需要做一下几步
1: 为该 xib 添加所属class& 在该xib 界面中 选择 File&s Owner 然后在实用工具栏中选择身份检查器,把 class 改为我们的委托类 如下图
&2: 建立连接 把 TabBarController 连接到 委托器中 , 点击助理编辑器, 如果编辑器右边显示的 是 委托器的 .m 文件 这在 标示的位置(这里切换文件) 切换为 .h 文件。
在上图中 选中& Tab Bar Controller 组件 并按住 Ctrl 把改组件拖到 右侧的 @end和 @interface 中的部分 ,此时松开 鼠标 会弹出一个对话框 ,让你填写连接类型connection属性保持默认 为 : Outlet & 输出口的名称,这里填写 tabBarViewContorller& 填写完成后 点击 connect 按钮。
上图中是我已经 建立好连接的。&
建立好连接后 xcode 会为我们生成 一系列的代码& 。
在委托器的 .h 文件中会为我们生成一个 输出口& 代码如下:
@property (retain, nonatomic) IBOutlet UITabBarController *tabBarViewC
该输出口的 唯一作用就是告诉程序& tabBarViewContrller 将连接到 xib 中的 组件对象。
@property 关键字 :可以让我们摆脱 创建get 和 set 方法的枯燥过程,但它需要和 .m 文件中的 @Synthesize 组合 这样就可以通知编译程序的时候自动创建 get 和 set 方法了
IBOutlet 关键字:用该关键字 标示改属性是一个输出口类型
在委托器的 .m文件中会为我们生成一个 输出口& 代码如下:
@synthesize tabBarViewController = _TabBarViewC //生成的代码
- (void)dealloc
&&& [_window release];
&&& [_tabBarViewController release]; // 生成的代码
&&& [super dealloc];
销毁改类实例时 同时销毁对象tabBarViewController 因为我们没有使用自动内存计数器,所以我们需要显式的销毁该对象。
3: 初始化视图 xib 文件 并添加到 当前的 视图中。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
&&& self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
&&& // Override point for customization after application launch.
&&& //加载视图文件
&&& [[NSBundle mainBundle]loadNibNamed:@&TabBarViewController& owner:self options:nil];
&&& [self.window addSubview:self.TabBarViewController.view];
&&& self.window.backgroundColor = [UIColor whiteColor];
&&& [self.window makeKeyAndVisible];
&&& return YES;
上面蓝色部分的代码 是我们手工添加进去的。&
到此我们就已经可以查看视图效果了 保存并运行 ,效果图如下 :
在上图中 我们已经可以看到又两个 菜单了,这两个菜单是 改组件 自动带的。
&下面我们来修改 菜单 的 风格样式 ,并创建一个自己的 菜单 。
依次展开 Objects 窗口下面的 tab bar controller 组件 选中 第一个 tab bar ltem 组件,你也可以 直接在 视图中选取,但我们一次点击的是 tab bar ltem 组件外面的 view controller ,需要再点一次 才可以选中 tab bar ltem 组件 ,这点要注意喔 ,选中后如下图:
打开我们的 属性检查器 。 在属性检查器 中的& Tab bar ltem 栏目中 有个 ldenfifier 属性, 这个属性是系统自带的 风格,各位童鞋 可以一个一个 去体验 一下 。
这里 我们 就把 第一个 tab bar ltem 的 ldentifier 属性选择为 contacts
第二个 tab bar ltem 的 ldentifier 属性选择为 Most viewed
我们在拖一个 tab bar ltem(在编辑器的右下角) 组件到 tab bar controller 组件中去 ,同意选中(要确定选择 Tab bar ltem 组件喔)并打开 属性检查器 设置 其风格。
在这一步 我们需要一个 24*24 项目的 小图片 作为 我们的 菜单图片 ,我这里 随便找了一张,并把他拖到工程中的Supporting Files 目录下 ,xcode 会自动提示把这个图片添加到工程的主束中(在 ios 项目中,每一个文件都属于 项目的主束),
选中刚刚添加的 tab bar ltem打开 属性检查器 设置 在 属性检查器 中的Bar ltem 栏目就是我们需要设置的属性,这里我们设置 title 和 image& title 为菜单名称,image 为菜单的图片 设置后 效果如下 :
保存看看效果 吧& 嘻嘻 。
在 tab Bar ltem 组件中 还有个非常方便的 属性 ,可以直接设置 该菜单下的条数& ,那就是& 属性检查器中的 tab bar ltem 栏目中的饿badge 属性 ,设置属性后 ,效果如下 。
呵呵 方便吧 。
下面 我们来 完成 如何让每个菜单 关联一个 视图,点击某个菜单 就跳到 某个视图去。
1: 首先创建几个 带 xib 的 控制器 。选择xcode 中的项目目录 右键 点击 new file -》ios -》cocoa Touch& -》 Objective -C calss 如图 :
并点击下一步 ,填写 class 属性 为 &ContactsViewController&&&& Subclass of 选择为 UiViewController&&&&& 并选中With xib for user interface 复选框&&
然后选择保存位置 完成创建& 。
&以同样的方法创建 MostViewController 和 HomeViewContrller控制器
为了区分 每个 view& 我们打开 这 3个 控制器的 xib 文件 为每个 xib 视图 添加一个 lable 组件 并为 每个 lable 的text 属性设置(选中lable组件打开属性检查器 在这里面设置text值)& 名称 为了 方便 我们每一个 lable 的text值设的和菜单的值 一致 。如图:
3 个 视图文件全部设置完成后 开始 设置 菜单的关联视图了 。
要设置 每个 菜单的 关联视图 也非常简单 。
选择菜单的 View Controller 并打开 身份检查器,把class 设置为 我们想打开的 视图控制器就可以了 如图 :
依次为 3个 菜单 设置不同的视图控制器(这里的控制器就是我们刚刚新建里的控制器)。
Contacts 的 class 设置为 :ContactsViewController
most Viewed的 class 设置为 :MostViewController
home 的 class 设置为 : HomeViewContrller
然后保存运行 ,运行去看看效果吧 。如图 :
有问题的 地方 欢迎 各位童鞋提出 。& 源代码下载地址 :
/ext/down_att.php?aid=36014&code=7333本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:查看:2452|回复:10
助理工程师
比如第1个view上有2个按钮bt1和bt2,第2个view有3个开关sw1、sw2和sw3
当我关闭sw1时,bt1被删除,当我开启sw1时,bt1被添加,sw2亦之。当开启sw3时,在第1个view上又新增了个bt3
有没有实现这种效果的例子呢,小弟在这跪求了
助理工程师
你可以用开关的响应事件控制按钮的hidden属性
助理工程师
问题是开关和按钮不在同一个view里,我试着在第1个含按钮的view里实例化第2个含开关的view,再通过实例变量把开关状态传给第1个view,但传过来的值都是空的。
助理工程师
1:通过tag去寻找view数组里面的view.然后把要设置的view的控件IBOulet出来。直接设置就可以了。。(针对你的界面是利用ib开发的)
2:2个view之上有一个 属性集合。在viewdidload的时候,获取相关属性,来设置view控件的属性。(界面是ib开发的,或者是自定义的都可以)
助理工程师
2:2个view之上有一个 属性集合。在viewdidload的时候,获取相关属性,来设置view控件的属性。(界面是ib开发的,或者是自定义的都可以)
------------------------------------------------
我说漏了一点,我用了tabbar模版,view1(含按钮)和view2(含开关)分别加在tab1和tab2上面。所以当程序启动时,点tab1标签进入view1时,就读取了这个属性,属性封装的数组有哪几个按钮,就显示哪几个按钮。而我再点tab2标签进入view2时,view2也读取了这个属性,然后我在view2里通过点击开关改变这个属性(关闭sw1,删除数组中的bt1)时,我想在view1里怕是看不见删除bt1的效果的吧
我想在view2里实例化view1,再通过这个实例变量获得view1的按钮,再在开关事件中删除按钮,关键代码是
//viewController2.m
viewController2
//按钮事件
- (void)switchSelected:(id)sender{
& && &&&viewController1 view1 = [[viewController1 alloc] init];
& && &&&UISwitch *selectedSwitch = (UISwitch *)
& && &&&NSInteger index = selectedSwitch.
& && &&&if (!selectedSwitch.on) {
& && && && && & switch (index) {
& && && && && && && && &case 0:
& && && && && && && && && && &&&[view1.bt1 removeFromSuperview];
& && && && && && && && && && &&&
& && && && && && && && &case 1:
& && && && && && && && && && &&&[view1.bt2 removeFromSuperview];
& && && && && && && && && && &&&
& && && && && & }
我只是随后写了这么多,这样做能有效果吗?
助理工程师
你要切换过去的时候才能看到效果。。而且,view2里面只需修改属性就好了。具体动画效果,在 view1 load的时候根据属性设置去做。。不知道我这么理解你得需求对不对。
助理工程师
你要切换过去的时候才能看到效果。。
-------------------------------------------------
这里所谓的切换就是点tab1标签么?
还有viewdidload这个方法到底什么时候被调用呢?我一直认为是程序启动后,我点了tab1进入view1时它的viewdidload方法就被调用,而以后再也不会被调用了。比如,我又点了tab2,进入view2,再回头点tab1,进入view1,这个时候view1的viewdidload是不会被调用的,画面还是原先第一次进入view1时的画面。我这样理解正确么?
如果正确的话,那么就算我在view2里改变了这个共有属性,当我再回到view1还是看不见效果的,因为它不会再调用viewdidload方法。
如果正确的话,那么
如果你利用的系统的table bar controller 可以在下面的几个函数里面做事情,,而不是viewDidload.这是比较简单的办法。。
- (void) viewDidAppear:(BOOL)animated
- (void) viewDidDisappear :(BOOL)animated
助理工程师
看了下文档,意思是告诉控制器它的view已被添加到window上了
在我这个程序里,我接收公有属性和添加按钮都应该放在viewDidAppear方法里,这样,当我启动程序,点tab1进入view1时,执行viewcontroller1的viewDidAppear这个方法,按钮通过属性来设置。然后我再点tab2,进入view2,在viewcontroller2的viewDidAppear方法里修改这个属性。最后我再回头点tab1,第2次进入view1时,程序依然执行viewcontroller1的viewDidAppear方法,在里面接收的属性是被修改过的,那么按钮也会被重新设置。
我这样理解对吗?
初级工程师
可以这么理解。。
助理工程师
恩,刚去试了个简单的例子,确实是第2次进入view1的后,它还是执行viewcontroller1的viewDidAppear方法,而viewdidload只在第1次进入view1时被调用,以后就不用了。
现在就是数组的存放和读取问题了,在网上看到有人说把这类情况的数据写到.plist文件里,有人说写到委托里,我觉得写到委托里好点,因为我不想每设置一次开关就读写一遍.plist文件。如果写到委托里,应该怎么写呢,能达到我要的效果吗?
就是2个viewcontroller都能调用上程序启动时的array,并且在viewcontroller2的viewDidAppear方法里得到array后修改它,最后在viewcontroller1的viewDidAppear方法里访问的array正是被修改过的,而不是程序启动时的array。}

我要回帖

更多关于 ios将view覆盖状态栏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信