zoukankan      html  css  js  c++  java
  • 02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

    一、按钮的设置

    1.设置背景图片

    [btn setBackgroundImage:image forState:UIControlStateNormal];

    2.内部UIImageView

    1> 设置内部UIImageView的图片

    [btn setImage:image forState:UIControlStateNormal];
    // 不能写成btn.imageView.image = image;

    2> 调整内部图片的内容模式

    self.imageView.contentMode = UIViewContentModeCenter;

    3> 调整内部ImageView的frame 

    重写 - (CGRect)imageRectForContentRect:(CGRect)contentRect方法

    #pragma mark - 内容区域里显示的图片区域位置
    - (CGRect)imageRectForContentRect:(CGRect)contentRect
    {
        CGFloat x = 10;
        CGFloat y = 0;
        CGFloat width = contentRect.size.width - 2 * x;
        CGFloat height = contentRect.size.height;
        return CGRectMake(x, y, width, height);
    }

    3.内部UILabel

    1> 设置内部UILabel的文字

    [btn setTitle:@"主页" forState:UIControlStateNormal];
    // 不能写成btn.titleLabel.text = @"主页";

    2> 文字居中

    self.titleLabel.textAlignment = NSTextAlignmentCenter;

    3> 文字大小

    self.titleLabel.font = [UIFont systemFontOfSize:12];

    4> 调整内部UILabel的frame

    重写 - (CGRect)titleRectForContentRect:(CGRect)contentRect方法

    #pragma mark - 内容区域里显示的title区域位置
    - (CGRect)titleRectForContentRect:(CGRect)contentRect
    {
        CGFloat x = 10;
        CGFloat y = 0;
        CGFloat width = contentRect.size.width - 2 * x;
        CGFloat height = contentRect.size.height;
        return CGRectMake(x, y, width, height);
    }

    4.覆盖父类在highlighted时的所有操作

    - (void)setHighlighted:(BOOL)highlighted { };

     


    二、让一个控制器拥有导航栏的最快方法:包装一层导航控制器 

     

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];  // controller 为UIViewController 的一个实例

     


    三、添加子控制器

    - (void)addChildViewController:

    [self addChildViewController:nav];

    会将子控制器添加到childViewControllers,并且子控制器是有顺序的

    * 目的就是持有子控制器,不让子控制器销毁,保证主控制器在,子控制器就在

     


     

    四、UIBarButtonItem导航按钮

    1> 创建一个带有文字的item

    [[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStyleBordered target:nil action:nil];

    2> 创建一个包装了自定义View的item

    - (id)initWithCustomView:(UIView *)customView

     

    3> 设置导航按钮UIBarButtonItem主题

     

    // 1.修改所有UIBarButtonItem的外观
    UIBarButtonItem *barItem = [UIBarButtonItem appearance];
    
    // 2.修改item的背景图片
    [barItem setBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [barItem setBackgroundImage:image2 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
    
    // 3.修改item上面的文字样式
    NSDictionary *dict = @{
        UITextAttributeTextColor : [UIColor darkGrayColor],
        UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
    };
    [barItem setTitleTextAttributes:dict forState:UIControlStateNormal];
    [barItem setTitleTextAttributes:dict forState:UIControlStateHighlighted];

     

     


     

    五、设置导航栏UINavigationBar主题

    // 1.appearance方法返回一个导航栏的外观对象 修改了这个外观对象,相当于修改了整个项目中的外观
    UINavigationBar *bar = [UINavigationBar appearance];
    
    // 2.设置导航栏的背景图片
    [bar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
    
    // 3.设置导航栏文字的主题
    [bar setTitleTextAttributes:@{
      UITextAttributeTextColor : [UIColor blackColor],
      UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
     }];

    六、设置状态栏样式

    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;

     

  • 相关阅读:
    遍历切片slice,结构体struct,映射map,interface{}的属性和值
    [转]Go语言string,int,int64 ,float之间类型转换方法
    [转] golang中struct、json、map互相转化
    [转]Jupyter默认目录和默认浏览器修改
    sublime text3输出窗口中文显示乱码问题解决方案
    Oracle 在SQL语句中如何获取系统当前时间并进行操作
    eclipse调试的时候怎么后退?
    外部无法访问虚拟机8088和50070端口
    hadoop启动后jps查不到namenode的解决办法
    Java给整数部分的字符串加上千分位分隔符
  • 原文地址:https://www.cnblogs.com/lszwhb/p/3832931.html
Copyright © 2011-2022 走看看