UITabBarController的如何更改只读属性性tabBar为什么能够修改

UITabBarController使用 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了1708字,被2人关注,获得了3个喜欢
UITabBarController使用
1.UITabBarController
UITabBarController通常作为整个程序的rootViewController,而且不能添加到别的 container viewController中。使用步骤:(1)初始化UITabBarController(2)设置UIWindow的rootViewController为UITabBarController(3)创建相应的子控制器(viewcontroller)(4)把子控制器添加到UITabBarControllerselectedIndex属性可用于设置当前被选中的为哪个viewcontroller可通过代理使tabbarcontroller的某一个viewcontroller不可用,即不可点击,示例代码:- (BOOL)tabBarController:(UITabBarController*)tabBarController shouldSelectViewController:(UIViewController*)viewController {if([tabBarController.viewControllersindexOfObject:viewController] ==1) {returnNO;}returnYES;}2.UITabbarUITabBar上面显示的每一个Tab都对应着一个ViewController,我们可以通过设置 viewcontroller.tabBarItem属性来改变tabbar上对应的tab显示内容。否则系统将会根据viewController的 title自动创建一个,该tabBarItem只显示文字,没有图像。当我们自己创建UITabBarItem的时候,我们可以显示的指定显示的图像和 对应的文字描述。当然还可以通过
设置背景颜色[tabVC.tabBar setBarTintColor:[UIColor grayColor]];设置选中item颜色:[tabVC.tabBarsetTintColor:[UIColorcolorWithRed:170/255.0green:0/255.0blue:0/255.0alpha:1.0]];注意(未验证):UITabBar自己有一些方法是可以改变自身状态,但是对于UITabBarController自带的tabBar,我们不能直接去修改其状态。任何直接修改tabBar的操作将会抛出异常uitabbaritem的titlePositionAdjustment属性可设置title的偏移量,示例代码:[newsVC.tabBarItemsetTitlePositionAdjustment:UIOffsetMake(0, -3)];UIBarItem的imageInsets属性可设置image的偏移量,示例代码:[newsVC.tabBarItemsetImageInsets:UIEdgeInsetsMake(20,0,0,0)];UITabBar的默认高度为49UITabBarController的tabBar.frame属性可任意修改tabbar的宽度和位置,但高度修改不生效。而且此时tabbarcontroller控制下的view controller的view也是按照tabor的默认尺寸和位置进行适配,如果要修改tabor的frame还需要手动对其控制下的view controller进行适配。3.UITabbarItemtabbaritem可分别设置image和selectedImage属性,用来显示选中和未选中时显示的图片UIBarItem的图片处理方案:1.(默认)使用系统的图片渲染处理,即时图片本身有颜色也将对最终显示结果无任何影响,此时可改变渲染的颜色
2.使用图片本身的颜色,此时需修改UIImage的renderingMode(只读)属性。示例代码:newsVC.tabBarItem.image
= [UIImage imageNamed:@"picture"];newsVC.tabBarItem.selectedImage= [UIImageimageNamed:@"icon87"];newsVC.tabBarItem.selectedImage= [newsVC.tabBarItem.selectedImageimageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
注:未被选中状态的图片默认会被渲染成灰色,但也使用与以上属性(可设为显示某一张图片的原色)
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常囧事等等,欢迎投稿《程序员》专题。
专题主编:小...
· 257485人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
· 29178人关注
【最新投稿方式】
为了保证专题文章的质量,暂时关闭投稿申请,改为【私信文章链接】给本专题的管理员 (花前月下) (判若...
· 7876人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Posts - 610, Comments - 29744
最近在写一个iPhone应用程序,基于MonoTouch,所以在开发方面的问题,基本都是在界面元素的搭建上。这个程序界面相对比较复杂,于是我根据自己的想法来进行组合,结果发现UITabBarController不能放入其他的视图内,而只能直接放在Window上(或Window里的UINavigationController里),否则就会出现界面向下偏移的情况。现在虽然有workaround,但是对于UITabBarController抗拒组合的情况,只能深表叹息了。
先来看一下这个界面的最终效果吧:
这里再简单描述一下效果。打开程序以后看到的是一个标准的带有两个标签界面,目前选中第一个,界面上有一个按钮。点击按钮,整个界面(连同下方的标签栏)都会切换至新界面,并可以退回。在第二个标签内则有另一个按钮,点击则会切换至新一级,注意此时下方的标签栏会保持不变。不过这个程序最关键的一点在于,标签栏上放浮动着一个文字区域,它独立于标签栏中的各个视图。
显然这里会需要一个UINavigationController作为根元素,其中放入一个UITabBarController和文字区域。在UITabBarController的第二个标签中,则放入另一个UINavigationController。由于“根导航”在切换时,UITabBarController和文字区域要同时显示和消失,于是我很自然地打算将UITabBarController和一个UILabel组合成一个自定义的UIViewController。这样的界面本该很容易,因为控件的组合是编写界面的常用手段。
于是我新建了一个CustomController.xib文件,放入了一个UITabBarController和一个UILabel,并补充了一些操作逻辑(显示拖动时的坐标)。这些文字显示的逻辑本就属于CustomController,在实际应用中它也会和UITabBarController内部的视图产生交互,因此我把这些逻辑都隐藏在CustomController中。我认为这个组合方式十分合理。不过,在界面上显示MyTabBarController后则出现了奇怪的状况:
当然,上面这个只是我直接把一个UITabBarController的View放入Window里的UIView控件之后出现的情况:向下整体偏移了。这个偏移量是最上方状态栏的高度,这让我很摸不着头脑。经过了一整下午的纠结试验,我的结论是:似乎UITabBarController抗拒组合。说地具体一些:UITabBarController会把视图中的UITabBar控件定位在屏幕下方,但是在计算位置的时候,它不会关注自己父容器,而是茫然地认为自己一定是在根窗体上,于是会把顶部状态栏的高度考虑进去。于是,如果它的父视图不是从整个界面(包括状态栏)的顶部算起,UITabBar的位置便会出现偏移了。
有资深iOS开发者告诉我,我把UITabBarController组合到另一个UIViewController里不是UITabBarController的标准用法,如果我要组合,就应该使用UITabBar控件自己搭配,自己处理切换逻辑。不过我始终认为UI元素(不单指控件)应该意识到自己会参与组合。例如UITableViewController,UIImagePickerController,组合使用是它们的天然职责。在我看来,如其他(我用过的)UI库一般,只要为每个控件设好Dock(类似iOS里的Auto Resizing),组合起来应该是随意自然的。
既然不能组合,那么扩展的方法似乎只有继承了——这样我便不能使用Interface Builder绘制界面,麻烦了不少。这里我创建一个MyTabBarController继承UITabBarController,并补充一些逻辑:
public class MyTabBarController : UITabBarController
/* Constructors */
public override void ViewDidLoad()
base.ViewDidLoad();
this.m_label = new UILabel()
Text = &Hello MonoTouch&,
TextAlignment = UITextAlignment.Center,
Frame = new System.Drawing.RectangleF(0, 400, 320, 20),
AutoresizingMask = UIViewAutoresizing.FlexibleTopMargin
this.View.AddSubview(this.m_label);
this.View.BringSubviewToFront(this.m_label);
private UILabel m_
public override void TouchesMoved(NSSet touches, UIEvent evt)
base.TouchesMoved(touches, evt);
var touch = (UITouch)touches.AnyO
var location = touch.LocationInView(this.View);
this.m_label.Text = location.ToString();
这样,就差不多了,剩下的就是简单地嵌套关系,以及在切换到第二个Tab的时候隐藏“根导航”的导航栏。
如果您有更好的做法,请务必告诉我。
Categories:
,登陆后便可删除或修改已发表的评论
(请注意保留评论内容)}

我要回帖

更多关于 如何更改只读属性 的文章

更多推荐

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

点击添加站长微信