• 项目中遇到的问题-1


      今天在实现公司项目5月版本的时候,碰到了一些问题,记录一下;

      1.点击首页NavigationBar上的某个按钮,出发tabBar的点击事件,实现tabBar切换到对应的View

      这次项目改版,为了改变之前赶进度不注重工程质量的问题,特意修改了整个应用的组织结构。但是研究了一下项目当前的TabBar,是在系统自带的TabBar上面盖了一个新的,并且还是继承于UIView(看来是准备完全自定义的,但是为啥又没有取代系统的TabBar呢,坑爹啊),然后在上面加了4个button.

      显然,这个实现对于一般的需求(包括点击切换啊,变色啊)都可以胜任,但是这样带来的问题也不少,还记得MJ大神的视频说过,当你决定自定义一个自己的TabBar的时候,系统原生的TabBar就应该被你抛弃了;所以按照大神的思路,特意修改了一下实现:

     1 -(void) creatTabBar
     2 {
     3     // 1.创建自定义的TabBar
     4     _myTabBar= [[NJTabBar alloc] init];
     5     _myTabBar.delegate = self;
     6 
     7     // 2.更换系统自带的tabbar
     8     [self setValue:_myTabBar forKeyPath:@"tabBar"];
     9 
    10     // 3.设置每个TabBarItem的默认图片和选中时图片
    11     for (int i = 0; i < self.viewControllers.count; i++) {
    12         NSString *norImageName = [NSString stringWithFormat:@"tabBarItem%d", i + 1];
    13         NSString *selectedImageName = [NSString stringWithFormat:@"tabBarItem%dSelected", i + 1];
    14         
    15         UIViewController *childVC = [self.viewControllers objectAtIndex:i];
    16         // 设置图标
    17         childVC.tabBarItem.image = [UIImage imageNamed:norImageName];
    18         // 设置选中的图标
    19         UIImage *selectedImage = [UIImage imageNamed:selectedImageName];
    20         if (IOS7) {
    21             // 声明这张图片用原图(别渲染)
    22             selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    23         }
    24         childVC.tabBarItem.selectedImage = selectedImage;
    25         
    26     }
    27 }

      通过广播的方式,像tabbarController发送Notificaiton,收到以后解析内容,如果是点击事件,则切换tabBar,这里使用的时tabbarController的代理方法,代码如下:(因为这里tabBarItem在我的项目中都是确定的,所以Index我就写死了)

      

    1 - (void)FenLeiPressed:(NSNotification*)notify
    2 {
    3     if ([notify.object isEqual:@"Fenlei"])
    4     {
    5         UIViewController *childVC = [self.viewControllers objectAtIndex:1];
    6         [self setSelectedViewController:childVC];
    7     }
    8 }

      2.自定义UISearchBar里面placeHolder在iOS6系统中,文字位置偏上,iOS7正常

      这个问题真是蛋疼,按说现在都2015年5月,苹果再过4个月马上就退出iOS9了,但是我司还是要求支持iOS6......据说是做了调查说目前还有10%的用户在使用iOS6系统。

      没办法,外事不决问度娘,作为程序员中逼格不高的胶水民工,总是期待着我现在的坑已经有大神碰到过了。果然,找到了一个解决办法:

      

     1 //重写父类方法,实现iOS6下面占位符文字居中
     2 - (CGRect)placeholderRectForBounds:(CGRect)bounds
     3 {
     4     if (iOS_Version < 7.0f) {
     5         CGRect inset = CGRectMake(bounds.origin.x+30, bounds.origin.y+5, bounds.size.width-96, bounds.size.height);
     6         return inset;
     7     }else {
     8         return [super placeholderRectForBounds:bounds];
     9     }
    10         
    11 }

      其实就是重写了父类的方法,在iOS6系统下重新设定了placeHolder占位的边界;如果不是这种情况,则正常放回父类的结果即可(一开始傻X了,else这行没写,各种没有文字显示)。

      总结:

      1.遇到问题不要慌,已经有很多同伴踩过你的坑了,要相信这一点。

      2.对于基础知识要扎实,大神的视频要经常看,这次的tabBar自定义其实就是个很好的例子,要好好消化一下。

      3.编程要养成想清楚再写的习惯,要有一条主线,分清轻重缓急。

      OK,good night!

      

  • 相关阅读:
    泛型的模板思想
    GTD:是一种态度
    如何debug android cts
    POJ 3352 无向图边双连通分量,缩点,无重边
    Oracle—用户管理的备份(一)
    Retinex processing for automatic image enhancement 翻译
    myBatis抛出异常Result Maps collection already contains value ...
    xxx cannot be resolved to a type 错误解决方法
    Cannot change version of project facet Dynamic Web Module to 3.0
    mysql JDBC URL格式各个参数详解
  • 原文地址:https://www.cnblogs.com/wdwblue/p/4496037.html
Copyright © 2020-2023  润新知