IOS7里launchimage必须有568的图片
// ios6显示状态栏
在单例里,appdelegate.m里:application.statusBarHidden = NO;
去除玻璃渲染:
修改状态栏的颜色:在控制器里viewcontroller.m中:
-(UIStatusBarStyle)preferreStatusBarStyle
{
return UIStatusBarStyleLightContent; //白色
}
给界面设灰色:
状态栏一般交给application管理:
在info里添加属性
则不交给控制器管理上面所做无效,交给了application管理
// 设置状态栏的颜色
application.statusBarStyle = UIStatusBarStyleLightContent;
建Classes文件夹,是虚拟的文件夹,在Finder建。appdelegate.m放倒Other文件夹里。
修改索引的位置,build setting搜索pch,显示简介拷贝路径。
导航控制器导航标题一样,tabbar标题不一样。每个界面是一个tabbar,导航控制器是它的子控制器:
把storyboard的view删掉,拖一个tab bar controller删掉view controller,再拖navigation controller.右键view controller连接到navigation controller
把table view controller删掉改为view controller,navigation controller的root view controller连接它们
选中tab bar controller底部tab bar item 设置image属性为相应图片,系统自带的tab bar 显示不了这个图片,图片填充整个tab bar item。自定义tab bar controller。
新建类ILTabBarViewController继承至UITabBarController放在main文件夹里;新建tab bar,ILTabBar 继承UIView放在main文件夹里。
选中tab bar controller ,告诉系统该tab bar controller采取自定义的方式
在ILTabBarViewController.m里
@interface ILTabBar()
@property (nonatomic, weak) UIButton *selectedButton;//默认uiview用weak
@end
- (void)viewDidLoad
{
[super viewDidLoad];
// 移除自带的tabBar,removeFromSuperview不会马上销毁,等该函数结束后才销毁,所以下面能tabBar.frame = self.tabBar.frame;
[self.tabBar removeFromSuperview];
NSLog(@"%@",self.tabBar);
// 创建tabBar
ILTabBar *tabBar = [[ILTabBar alloc] init];
tabBar.delegate = self;
tabBar.frame = self.tabBar.frame;
[self.view addSubview:tabBar];
}
在ILTabBar.m里
- (void)addBtns
{
NSString *imageName = nil;
NSString *selImageName = nil;
for (int i = 0; i < 5; i++) {
ILTabBarButton *btn = [ILTabBarButton buttonWithType:UIButtonTypeCustom];
// 绑定角标
btn.tag = i;
imageName = [NSString stringWithFormat:@"TabBar%d",i + 1];
selImageName = [NSString stringWithFormat:@"TabBar%dSel",i + 1];
// 设置按钮的图片
[btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:selImageName] forState:UIControlStateSelected];
// 监听按钮的点击
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown]; //点击立即 upinside还等放开
[self addSubview:btn];
// 默认选中第一个按钮
if (i == 0) {
[self btnClick:btn];
}
}
}
- (void)layoutSubviews
{
[super layoutSubviews];
CGFloat btnW = self.bounds.size.width / self.subviews.count;
CGFloat btnH = self.bounds.size.height;
CGFloat btnX = 0;
CGFloat btnY = 0;
// 设置按钮的尺寸
for (int i = 0; i < self.subviews.count; i++) {
UIButton *btn = self.subviews[i];
btnX = i * btnW;
btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
}
}
// 点击按钮的时候调用
- (void)btnClick:(UIButton *)button
{
// 取消之前选择按钮
_selectedButton.selected = NO;
// 选中当前按钮
button.selected = YES;
// 记录当前选中按钮
_selectedButton = button;
// 切换控制器,通知ILTabBarViewController修改SelectedIndex
if ([_delegate respondsToSelector:@selector(tabBar:didSelectedIndex:)]) {
[_delegate tabBar:self didSelectedIndex:button.tag];
}
}
取消高亮效果 自定义button,新建ILTabBarButton继承uibutton放在main文件夹里
在ILTabBarButton.m里:
// 取消高亮状态
- (void)setHighlighted:(BOOL)highlighted
{
}
切换控制器:
1.用block
在ILTabBar.h里:
// block作用:保存一段代码,到恰当的时候再去调用
// 如果需要传参数给其他对象,block才需要定义参数
typedef void(^ILTabBarBlock)(int selectedIndex);
@interface ILTabBar : UIView
//// 相当于小弟,定义block arc用copy
@property (nonatomic, copy) ILTabBarBlock block;
@end
在ILTabBarViewController.m里:
tabBar.block = ^(int selectedIndex){
self.selectedindex = selectedIndex;
}
在ILTabBar.m里:
btnClick里:
if (_block) { //防止默认选中0时,block 为nil导致运行报错
_block(button.tag);
}
2.用代理
在ILTabBar.h里:
@class ILTabBar;
@protocol ILTabBarDelegate <NSObject>
@optional
- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index;
@end
@interface ILTabBar : UIView
@property (nonatomic, weak) id<ILTabBarDelegate> delegate; //是weak
@end
在ILTabBarViewController.m里:
@interface ILTabBarViewController ()<ILTabBarDelegate>
@end
viewDidLoad里:tabBar.delegate = self;
// 代理方法
- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index
{
self.selectedIndex = index;
}
在ILTabBar.m里:
btnClick里:
// 切换控制器
if ([_delegate respondsToSelector:@selector(tabBar:didSelectedIndex:)]) {
[_delegate tabBar:self didSelectedIndex:button.tag];
}
完善tarbar:
在ILTabBarViewController.m里:
NSString *imageName = nil;
NSString *selImageName = nil;
for (int i = 0; i < self.childViewControllers.count; i++) {
imageName = [NSString stringWithFormat:@"TabBar%d",i + 1];
selImageName = [NSString stringWithFormat:@"TabBar%dSel",i + 1];
// 添加底部按钮
[tabBar addTabBarButtonWithName:imageName selName:selImageName];
}
在ILTabBar.h里:
// 给外界创建按钮
- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName;
在ILTabBar.m里:
// 提供一个方法给外界添加按钮
- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName
{
// 创建按钮
ILTabBarButton *btn = [ILTabBarButton buttonWithType:UIButtonTypeCustom];
// 设置按钮的图片
[btn setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:selName] forState:UIControlStateSelected];
// 监听按钮的点击
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown];
[self addSubview:btn];
}
把
btn.tag = i;
if (i == 0) {
[self btnClick:btn];
}
放在layoutSubviews里
ps:
layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews,等addSubview所在函数结束后
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件