您的位置:首页 > 移动开发 > IOS开发

iOS开发小白学习体验-11

2015-09-28 01:32 519 查看

UINavigationBar

navigationBar的属性和方法

UINavigationBar *bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 60, 400, 44)];
//    bar.backgroundColor = [UIColor redColor];

/** UIBarStyle for UINavigationBar and UIToolBar
*  UIBarStyleDefault          = 0,
*  UIBarStyleBlack            = 1,
*  UIBarStyleBlackOpaque      = 1, // 不提倡. Use UIBarStyleBlack
*  UIBarStyleBlackTranslucent = 2, // 不提倡. Use UIBarStyleBlack and set the translucent property to YES
*/
// 貌似,UINavigationBar在视图上显示出来的颜色由两个颜色决定。一个是UIBarStyle另一个是backgroundColor。(目前测试出来是这样的,不确定)
bar.barStyle = UIBarStyleDefault;/**< bar的类型 */

bar.delegate = self;/**< navigationbar的代理 */

/**
在iOS6和之前的版本,默认是NO.
如果barStyle设置的是UIBarStyleBlackTranslucent,那么一直是YES

在iOS7的新特性:
默认情况下是YES
你可以把值设为NO,强行设置一个不透明的背景

如果导航栏有一个自定义的背景图片,那么默认值是由图片的alpha(透明度)来决定的
如果它任意一个像素的alpha小于1.0,那么就是YES

如果你用一个bar设置setsetTranslucent:YES用一张不透明的自定义背景图像
它将应用系统不透明度小于1的图像

如果你用一个bar设置setsetTranslucent:NO用一张半透明的自定义背景图像
它将会用bar的barTintColor给定义规定一个不透明的背景图片,或者用UIBarStyleBlack
的黑色,或者用UIBarStyleDefault的白色的方式,如果barTintColor为空的话
*/
[bar isTranslucent];

// 推一个navigationitem,在navigationbar中间显示item的标题
// 之前的导航栏(如果它还存在的话),会在左上角显示"后退"按钮
UINavigationItem *item = [[UINavigationItem alloc]initWithTitle:@"你妹的"];
[bar pushNavigationItem:item animated:YES];

// 弹出之前我们设置的item,bar上就没有了
[bar popNavigationItemAnimated:YES];
// 只读
UINavigationItem *item2 = bar.topItem;
// 只读
item2 = bar.backItem;
// 存放UINavigationItem 的数组
NSLog(@"%ld",bar.items.count);
// 如果animated写的是yes,那么模拟一个推或者弹出就取决于新的topItem是否已经在堆栈中
[bar setItems:[[NSArray alloc]init] animated:YES];

bar.tintColor = [UIColor redColor];
bar.barTintColor = [UIColor redColor];/**< 修改导航栏整体的颜色 */
// 设置navigationbar的背景图片,是否透明取决于BarMetrics的样式

/**
UIBarMetrics 决定了样式
UIBarMetricsDefault,
UIBarMetricsCompact, 透明的
UIBarMetricsDefaultPrompt = 101, // Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar
UIBarMetricsCompactPrompt,

UIBarMetricsLandscapePhone NS_ENUM_DEPRECATED_IOS(5_0, 8_0, "Use UIBarMetricsCompact instead") = UIBarMetricsCompact,
UIBarMetricsLandscapePhonePrompt NS_ENUM_DEPRECATED_IOS(7_0, 8_0, "Use UIBarMetricsCompactPrompt") = UIBarMetricsCompactPrompt,
*/

[bar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];
// 设置阴影图片
bar.shadowImage = [UIImage imageNamed:@""];
// 设置bar的title的样式(是字典)
bar.titleTextAttributes = @{};
// backIndicatorImage是在back按钮旁边显示
bar.backIndicatorImage = [UIImage imageNamed:@""];
// backIndicatorTransitionMaskImage是在push或者pop的时候使用并覆盖内容
bar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@""];

[self.view addSubview:bar];


nabigationBar的代理方法

#pragma mark - NavigationBar的代理方法
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item
{
return YES;// 可以推,如果返回NO,不能推
}// called to push. return NO not to.

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item
{
// 在push动画结束的时候唤醒这个方法
NSLog(@"动画结束了,我出来");
}// called at end of animation of push or immediately if not animated

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
{
return YES;// 用法和shouldPushItem方法类似
}// same as push methods

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
// 用法和didPushItem类似
NSLog(@"pop动画结束,我出来");
}


UINavigationItem

在苹果的API里UINavigationItem和UINavigationBar就像兄弟一样,分不开

UINavigationItem的一些常用属性

self.view.backgroundColor = [UIColor whiteColor];
// UINavigationItem对象在UINavigationBar中显示
// UINavigationController里不能push Item
UINavigationItem *item = [[UINavigationItem alloc]initWithTitle:@"hello"];

UINavigationBar *bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 44)];

//    bar.backgroundColor = [UIColor redColor];
[bar pushNavigationItem:item animated:YES];

item.title = @"你妹的";/**< item的标题 */
//    item.titleView = [[UIView alloc]init];/**< 用自定义视图来代替一个标题,水平方向,只有当这个item在堆栈的顶端的时候能显示 */
item.prompt = @"这是什么";/**< 在导航栏按钮上边的描述文本 */
item.backBarButtonItem = [[UIBarButtonItem alloc]init];/**< 返回按钮 */
item.hidesBackButton = YES;
item.leftBarButtonItem = [[UIBarButtonItem alloc]init];/**< 设置左边的按钮 */
item.rightBarButtonItem = [[UIBarButtonItem alloc]init];/**< 设置右边的按钮 */
item.leftBarButtonItem = nil;
item.rightBarButtonItem.customView.hidden = YES;
[self.view addSubview:bar];


自定义UINavigationItem的两种方法以及相对应的隐藏方法

UIImage *searchimage=[UIImage imageNamed:@"search.png"];

UIBarButtonItem *barbtn=[[[UIBarButtonItem alloc] initWithImage:nil style:UIBarButtonItemStyleDone target:self action:@selector(searchprogram)] autoRelease];

barbtn.image=searchimage;

self.navigationItem.rightBarButtonItem=barbtn;

这种设置出来的item图片跟大小是固定的

其隐藏方法是:在需要隐藏的时候self.navigationItem.xxxItem = nil;

显示方法是重新alloc-init一次;

#pragma mark 第二种:

IButton*rightButton = [[UIButtonalloc]initWithFrame:CGRectMake(0,0,30,30)];

[rightButtonsetImage:[UIImageimageNamed:@"search.png"]forState:UIControlStateNormal];

[rightButtonaddTarget:selfaction:@selector(searchprogram)forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem*rightItem = [[UIBarButtonItemalloc]initWithCustomView:rightButton];

[rightButton release];

self.navigationItem.rightBarButtonItem= rightItem;

[rightItem release];

这种方式设计出来的item比较灵活,尤其是在 隐藏显示的时候:

隐藏方法:self.navigationItem.xxxItem.customView.hidden =YES;

显示方法,同上xxx.hidden = NO;

这种方式更合理一些,因为不需要不断的创建/消除,所以推荐用这种方法


UIBarButtonItem

UIBarButtonItem为导航栏按钮,在导航栏的左侧和右侧,他们具有许多种不同的形状和形式

UIBarButtonItem只能放在UIToolBar或者UINavigationBar这两个类上面

UIBarButtonItem的各种创建方式

最常规的创建方法,不设置任何属性
- (instancetype)init NS_DESIGNATED_INITIALIZER;
用编码器创建
- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
自定义设置按钮的图片,以及点击方法
- (instancetype)initWithImage:(nullable UIImage *)image style:(UIBarButtonItemStyle)style target:(nullable id)target action:(nullable SEL)action;

- (instancetype)initWithImage:(nullable UIImage *)image landscapeImagePhone:(nullable UIImage *)landscapeImagePhone style:(UIBarButtonItemStyle)style target:(nullable id)target action:(nullable SEL)action NS_AVAILABLE_IOS(5_0); // landscapeImagePhone will be used for the bar button image when the bar has Compact or Condensed bar metrics.
设置按钮的文字,并设置点击方法
- (instancetype)initWithTitle:(nullable NSString *)title style:(UIBarButtonItemStyle)style target:(nullable id)target action:(nullable SEL)action;
选择系统自带的样式设置按钮,并设置点击方法
- (instancetype)initWithBarButtonSystemItem:(UIBarButtonSystemItem)systemItem target:(nullable id)target action:(nullable SEL)action;
- (instancetype)initWithCustomView:(UIView *)customView;

系统自带的按钮的样式

typedef NS_ENUM(NSInteger, UIBarButtonSystemItem) {
UIBarButtonSystemItemDone,显示done文字(完成)
UIBarButtonSystemItemCancel,显示cancel文字(取消)
UIBarButtonSystemItemEdit,显示edit文字(编辑)
UIBarButtonSystemItemSave,显示save文字(保存)
UIBarButtonSystemItemAdd,加号的图标
UIBarButtonSystemItemFlexibleSpace,将两个按钮撑开最大的距离
UIBarButtonSystemItemFixedSpace,将两个按钮撑开一段距离
UIBarButtonSystemItemCompose,编辑的图标
UIBarButtonSystemItemReply,返回图标
UIBarButtonSystemItemAction,跳转按钮
UIBarButtonSystemItemOrganize,组织按钮
UIBarButtonSystemItemBookmarks,图书按钮
UIBarButtonSystemItemSearch,搜索按钮
UIBarButtonSystemItemRefresh,刷新按钮
UIBarButtonSystemItemStop,关闭按钮
UIBarButtonSystemItemCamera,相机按钮
UIBarButtonSystemItemTrash,垃圾箱按钮
UIBarButtonSystemItemPlay,播放按钮
UIBarButtonSystemItemPause,暂停按钮
UIBarButtonSystemItemRewind,快退按钮
UIBarButtonSystemItemFastForward,快进按钮
UIBarButtonSystemItemUndo NS_ENUM_AVAILABLE_IOS(3_0),显示undo文字
UIBarButtonSystemItemRedo NS_ENUM_AVAILABLE_IOS(3_0),显示redo文字
UIBarButtonSystemItemPageCurl NS_ENUM_AVAILABLE_IOS(4_0),
};


UIBarButtonItem的属性

UINavigationBar *bar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)];
/**
要想将UIBarButtonItem加载在UINavigationBar上,
首先应该将UIBarButtonItem加载到UINavigationItem上,
因为UIBarButtonItem只是一个导航栏按钮
*/
UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"时不我待" style:UIBarButtonItemStylePlain target:self action:@selector(hello)];
UINavigationItem *item2 = [[UINavigationItem alloc]initWithTitle:@"没错就是我"];
[bar pushNavigationItem:item2 animated:YES];
item2.rightBarButtonItem = item;
/*
typedef NS_ENUM(NSInteger, UIBarButtonItemStyle) {
UIBarButtonItemStylePlain,
UIBarButtonItemStyleBordered NS_ENUM_DEPRECATED_IOS(2_0, 8_0, "Use UIBarButtonItemStylePlain when minimum deployment target is iOS7 or later"),
UIBarButtonItemStyleDone,
};
*/
item.style = UIBarButtonItemStylePlain;/**< 默认是UIBarButtonItemStylePlain类型的 */
item.width = 20.0;/**< 默认是0.0 */
item.tintColor = [UIColor redColor];/**< 按钮文字的颜色 */
UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPageCurl target:self action:@selector(hello)];
item2.leftBarButtonItem = item3;
// 给UIBarButtonItem指定背景图片
[item setBackgroundImage:[UIImage imageNamed:@"Icon.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsCompactPrompt];

[self.view addSubview:bar];


UIToolBar

UIToolBar和UINavigationBar很像,方法也很多相似的,可以借鉴一下

/**< 总的来说,UIToolbar和UINavigationBar很像,使用的时候可以借鉴一下 */
UIToolbar *bar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-44, self.view.frame.size.width, 44)];
[self.view addSubview:bar];
bar.barStyle = UIBarStyleDefault;/**< bar的类型,barStyel只为了ToolBar和NavigationBar用 */
bar.tintColor =[UIColor redColor];/**< 按钮的明调颜色 */
bar.barTintColor = [UIColor redColor];/**< bar的明调颜色 */
UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(hello)];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:@selector(hello)];/**< 撑开合适的距离 */
UIBarButtonItem *item3 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(hello)];
UIBarButtonItem *item4 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:@selector(hello)];/**< 撑开最大的距离 */
UIBarButtonItem *item5 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(hello)];
bar.items = [NSArray arrayWithObjects:item1,item2,item3,item4,item5, nil];/**< 这是toolbar添加UIBarButtonItem的数组,加了多少个就会在toolbar上显示多少个按钮 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios ios开发 体验