array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 iOS 之项目中遇到的问题总结 - 爱码网
 昨天去一家公司面试,面试官问了我在项目开发中遇到过哪些问题,是什么引起的,怎样解决的? 当时由于有点小紧张只说出了一两点,现在就来好好总结一下.

问题:

1.两表联动

      所谓的两表联动就是有左右两个表格,左边的表格由二个分类构成,大分类用HeaderView 展示,小分类用cell 展示;右边的表格负责展示分类下的商品.  通过左边的分类点击展示对应右边表格的商品好处理,通过tableView的didSelectRowAtIndexPath 方法就能解决,可关键是滑动右边的表格要对应选中左边的分类,怎么处理???

      还是tableView 的代理方法 

- (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section { 

    if (_isRelate) { 

        NSInteger topCellSection = [[[tableView indexPathsForVisibleRows] firstObject] section];  //右边的section      

    } 

} 

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { 

    if (_isRelate) { 

        NSInteger topCellSection = [[[tableView indexPathsForVisibleRows] firstObject] section];  //右边的section 

        if (tableView == _rightTableView) {   //根据右边表格的section 查找左边对应的row  或section 

         }

    } 

}

#pragma mark - tableView 是继承scrollView 的

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

    _isRelate = YES;

}

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    if (tableView.tag==0)         return 40;   

   else  return 0.01;

}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

     if (tableView.tag==0)          return 0;

    else         return 0.01;

}

 

注:右边滑动表格的 heightForHeaderInSection 以及 heightForFooterInSection 必须>0 使用才有效果

 这是参考的gitHub 上的代码实现的,如需看源码,去gitHub搜索两表联动即可. 如果有更好的处理办法,欢迎补充!

2.关于UITabBar的隐藏

刚开始一直是使用 [self.tabBarController.tabBar setHidden:NO]; 对tabBar 进行隐藏的,这个代码在一般情况确实能实现隐藏的效果,但是什么情况下会有问题呢?

   当控件(比如button)靠近屏幕底部的时候,无法触发事件,这个问题纠结了好久,也请教了许多前辈,后来我也上网差了些资料,终于,找到原因了. 就是tabBar 的隐藏问题导致的.虽然tabBar栏被隐藏了,但在隐藏的区域会成为一片空白区,无法被其他视图使用。这也就是为何button不响应时间的原因了.

解决办法:self.hidesBottomBarWhenPushed = YES; (但是要注意使用的时机,应该在视图push 前就设置隐藏,在pop 前设置为NO)

3.关于键盘遮挡输入框的问题

这个问题有两种情况,1种是输入框在self.view 上 另外一种是输入框在self.tableView 上.

如果是第一种情况,可以去看一下我第一篇博  http://www.cnblogs.com/Cyan-zoey/p/5133167.html

如果是第二种情况:

_oY=_rightTableView.frame.size.height;//记录初始化的时候tableView 的高度

//键盘出现的时候

- (void)keyboardWillShow:(NSNotification *)notification {

    CGRect initialFrame = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];    

    CGRect convertedFrame = [self.view convertRect:initialFrame fromView:nil];

    CGRect tvFrame = _rightTableView.frame;

    tvFrame.size.height = convertedFrame.origin.y;

    _rightTableView.frame = tvFrame;

}

 //隐藏键盘

- (void)keyboardWillHide:(NSNotification *)notification {

    CGRect tvFrame = _rightTableView.frame;

    tvFrame.size.height =_oY;    

    _rightTableView.frame = tvFrame;

}

 

  推荐使用第三方: IQKeyboardManager   

4.手势冲突

a.UIWebView 嵌套UIScrollView

       因为webView的内容是从网络加载的H5的页面,放入scrollView 里面造成手势冲突,从第一个页面滑动到webView所在页面的时候,就无法滑回去了,试了很多种办法都没解决. 后来去掉了UIScrollView. 如果有解决办法的,望赐教! (后来试了下webView中放其他的网页,发现并没有产生这个问题,所以可能是嵌入的网页做了什么处理,导致出现了这个情况)

b.tableview上添加点按手势与cell 点击事件冲突。

    我在tableView 上添加了点按手势,在方法中删除了弹出层

  [_tableView setUserInteractionEnabled:YES];

    UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tableTap)];

    tap.delegate=self;

    [_tableView addGestureRecognizer:tap];

#pragma mark ---点击tableView 中的空白部分删除弹出层

- (void)tableTap{

    [_typeView removeFromSuperview];

    _isEdit=NO;  //在弹出层显示的时候设置为Yes  ,消失的时候设置为NO

}   

解决办法:实现手势的代理方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

    // 输出点击的view的类名

    //NSLog(@"%@", NSStringFromClass([touch.view class]));

    if (_isEdit==YES) {  //不拦截

        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

            return YES;

        }

    }else{

        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {

            return NO;

        }

    }    

    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件    

    return  YES;

}

   

c.scrollView上添加手势不响应

      http://blog.csdn.net/zouxianm/article/details/48194657

 

补充:事件冲突

      self.view 上添加tableView ,在self.view 整体往上移动的时候,tableView 的行点击事件失效,任何手势都不响应。

      解决办法:将tableView 添加到到window 上。

5.弹出层与删除层

    5.1 弹出可移动的view(类似于windows上面可移动的弹框)  

 //先创建手势

   UIPanGestureRecognizer * panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self

                                                                                            action:@selector(doHandlePanAction:)];

    [self.bigView addGestureRecognizer:panGestureRecognizer];

  //拖动处理

 - (void) doHandlePanAction:(UIPanGestureRecognizer *)paramSender{

    CGPoint point = [paramSender translationInView:self.view];

    NSLog(@"X:%f;Y:%f",point.x,point.y);    

    paramSender.view.center = CGPointMake(paramSender.view.center.x + point.x, paramSender.view.center.y + point.y);

     [paramSender setTranslation:CGPointMake(0, 0) inView:self.view];

   }

 

  5.2 点击弹出层之外的地方,删除弹出层。

         a.  弹出层加在self.view 上面               

                #pragma mark ---触摸事件---判断当前点是否在某个范围内 

               - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 

                      CGPoint  t=[[touches anyObject] locationInView:self.bigView];  //bigView为弹出层                     

                      if (!CGRectContainsPoint(_bigView.frame, point))  //不在某个范围内

                        {      

                             [self.bigView removeFromSuperview];//删除

                        }

               }

          b.弹出层加在AppDelegate的window上面。     

              //先注册点击手势              

                  [_bigView setUserInteractionEnabled:YES];

                  UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(didmissTK:)];

                  [_bigView addGestureRecognizer:tap];

            //实现方法

                - (void)didmissTK:(UIGestureRecognizer *)gest{

                       CGPoint point = [gest locationInView:_bigView];

                      if (!CGRectContainsPoint(_bigView.frame, point, point)){                        

                          [self.bigView removeFromSuperview];       

                         }

                  }   

       原因: 加在self.view 上面视图的不包括顶部的导航栏,要想包含导航栏就只能加在window 上面。  加在window上面就相当于在self.view 上覆盖了一层,因此 touchesBegan方法就无法响应,因此只能在window的弹出层上加手势去删除弹出层。         

6.点击按钮不响应

  a. 看一下该按钮是否是在UIImageView 上面,如果在,看一下是否把交互打开[_bigView setUserInteractionEnabled:YES];

  b. 打印一下按钮的frame以及按钮父视图的frame,看一下按钮是否在父视图的范围内,如果不在,那么按钮不响应。在父视图的frame 内不响应,查看frame 是否不在屏幕内(self.view ),如果父视图的self.view.frame.original  为负,不响应事件。

  c. 看一下按钮所在视图之上是否有覆盖层。如果有,移除覆盖层即可。     

   还有就是如果给按钮设置圆角或者边框颜色(与layer有关的)没有反应,记得设置 [btn.layer setMasksToBounds:YES];

7.  Cell背景色覆盖按钮的颜色

    cell默认选中行的颜色是灰色的,如果cell上有按钮等控件,会让自身的颜色被灰色覆盖

解决方法: 在自定义的cell中实现如下两个方法即可:

          -(void)setSelected:(BOOL)selected animated:(BOOL)animated {

                 [super setSelected:selected animated:animated];

                 被覆盖的控件名.backgroundColor = UIColor.redColor;

           }

        -(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {

                [super setHighlighted:highlighted animated:animated];

                被覆盖的控件名.backgroundColor = UIColor.redColor;

            }

 

  暂时只能想到这么多啦,再想到了新的会及时补充的.

 

现在来总结一下项目中使用到的SDK

1.腾讯地图SDK :进行地位,以及地图展示

2.SDWebImage:图片处理

    实现过程:a: 如果设置了placeholderImage(占位图)就先展示占位图

                   b:   SDImageCache 从内存中查找缓存的图片-》 找到了图片 , SDImageCacheDelegate 回调 到UIImageView+WebCache 等前端展示图片

                                                                                -》 没找到图片 则去硬盘中查找-》找到了,SDImageCacheDelegate回调展示图片

                                                                                                                           -》没找到 ,使用SDWebImageManager下载图片

                  c:替换占位图

                   详情请参考                                                               

3.MJRefersh:上下拉刷新

4.MBProgressHUD:提示框  

5.AFNetWorking: 网络请求

     (1)组成:(封装自NSURLSession)

            NSURLSession (AFURLSessionManager/AFHTTPSessionManager)----网络通信模块(核心模块)    

            Security(AFSecurityPolicy)----网络通讯安全策略模块

            Reachability(AFNetworkReachabilityManager)----网络状态监听模块

            Serialization(AFURLResponseSerializationAFURLRequestSerialization/)---网络通信信息序列化、反序列化模块

            UIKit     ----UIKit库    

 

6.友盟应用统计错误分析

7.ping++:第三方支付

8.ZBarSDK:扫二维码/条形码   详细请见:http://www.cnblogs.com/Cyan-zoey/p/6121909.html

9.GtSdk :消息推送                详情请见:http://www.cnblogs.com/Cyan-zoey/archive/2016/04/28.html

10.融云即时通讯,集成客服.

 

相关文章: