• iOS不得姐项目--TabBar的重复点击实现当前模块刷新;状态栏点击实现当前模块回滚到最顶部


    一.实现功能:重复点击tabBar,刷新当前TableView,其余不受影响

      <1>实现思路:

    • 错误的方法:

      TabBar成为自己的代理,监听自己的点击--这种方法是不可取的,如果外面设置了代理会覆盖里面的

    • 正确的方法:
      • 既然没有合适的控制器来监听TabBar的点击,就让AppDelegate来做代理,接收到点击事件后,通过通知中心发送通知. -- 注意:发送通知,userInfo将要传递的字典参数,项目里面就一个TabBarVC,可以通过它来获取当前点击的控制器,所以没有传递参数.
      • 哪个控制器需要,就监听发出的通知. -- 发出的通知字符串常量,最好在外界定义好 -- 项目中重复点击需要刷新对应的帖子控制器,所以在帖子控制器中监听发出的通知,接收到通知后直接条用刷新的方法. --注意:记录上次选中的控制器,判断本次点击是否与上次一样,并且为显示在当前的控制器

    二.状态栏点击,让显示在当前的TableView回到顶部. -- 实现思路:在APPDelegate中,程序启动之前创建一个窗口,高度20,添加点击的手势,手势事件中递归遍历当前窗口所有子控件,满足是UIScrollView或其子类的空间并且显示在当前,让该scrollView回到顶部.

    • 注意,自从iOS9之后直接添加窗口,没有给窗口添加跟控制器会报错.添加了跟控制器后,UI界面会混乱.问题暂未解决!!!!!!!!!!!!!!!!!!!
    • 问题找到解决方案:在添加topWindow的时候,延迟一段时间再将其添加顶部,我有种蛋蛋的忧伤啊!!
     1 #import "XMGTopWindow.h"
     2 
     3 @implementation XMGTopWindow
     4 
     5 static UIWindow *window_;
     6 
     7 + (void)initialize
     8 {
     9     window_ = [[UIWindow alloc] init];
    10     window_.frame = CGRectMake(0, 0, XMGScreenW, 20);
    11     window_.windowLevel = UIWindowLevelAlert;
    12     [window_ addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(windowClick)]];
    13 }
    14 
    15 + (void)show
    16 {
    17     window_.hidden = NO;
    18 }
    19 
    20 + (void)hide
    21 {
    22     window_.hidden = YES;
    23 }
    24 
    25 /**
    26  * 监听窗口点击
    27  */
    28 + (void)windowClick
    29 {
    30     UIWindow *window = [UIApplication sharedApplication].keyWindow;
    31     [self searchScrollViewInView:window];
    32 }
    33 
    34 + (void)searchScrollViewInView:(UIView *)superview
    35 {
    36     for (UIScrollView *subview in superview.subviews) {
    37         // 如果是scrollview, 滚动最顶部
    38         if ([subview isKindOfClass:[UIScrollView class]] && subview.isShowingOnKeyWindow) {
    39             CGPoint offset = subview.contentOffset;
    40             offset.y = - subview.contentInset.top;
    41             [subview setContentOffset:offset animated:YES];
    42         }
    43         
    44         // 继续查找子控件
    45         [self searchScrollViewInView:subview];
    46     }
    47 }
    48 @end
    View Code
  • 相关阅读:
    IE浏览器cookie存放在本地什么目录
    C# clickonce 部署自定义文件
    [C#.Net]C#连接Oracle数据库的方法
    Eclipse 插件一览
    登录名 '***' 拥有一个或多个数据库。在删除该登录名之前,请更改相应数据库的所有者。 (Microsoft SQL Server,错误: 15174)
    SqlServer_表结构查询_查询当前用户所有表名
    sqlserver怎么删除有外键关联的数据?
    springboot logback控制台中文输出乱码
    控制台运行JAVA的jar文件时乱码 / Gradle编译设置编码格式
    Python 算法之一
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5542383.html
Copyright © 2020-2023  润新知