iOS开发小白学习体验-11


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上显示多少个按钮 */
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页