iOS不得姐项目--TabBar的重复点击实现当前模块刷新;状态栏点击实现当前模块回滚到最顶部
2024-10-14 09:22:21
一.实现功能:重复点击tabBar,刷新当前TableView,其余不受影响
<1>实现思路:
- 错误的方法:
TabBar成为自己的代理,监听自己的点击--这种方法是不可取的,如果外面设置了代理会覆盖里面的
- 正确的方法:
- 既然没有合适的控制器来监听TabBar的点击,就让AppDelegate来做代理,接收到点击事件后,通过通知中心发送通知. -- 注意:发送通知,userInfo将要传递的字典参数,项目里面就一个TabBarVC,可以通过它来获取当前点击的控制器,所以没有传递参数.
- 哪个控制器需要,就监听发出的通知. -- 发出的通知字符串常量,最好在外界定义好 -- 项目中重复点击需要刷新对应的帖子控制器,所以在帖子控制器中监听发出的通知,接收到通知后直接条用刷新的方法. --注意:记录上次选中的控制器,判断本次点击是否与上次一样,并且为显示在当前的控制器
二.状态栏点击,让显示在当前的TableView回到顶部. -- 实现思路:在APPDelegate中,程序启动之前创建一个窗口,高度20,添加点击的手势,手势事件中递归遍历当前窗口所有子控件,满足是UIScrollView或其子类的空间并且显示在当前,让该scrollView回到顶部.
- 注意,自从iOS9之后直接添加窗口,没有给窗口添加跟控制器会报错.添加了跟控制器后,UI界面会混乱.问题暂未解决!!!!!!!!!!!!!!!!!!!
- 问题找到解决方案:在添加topWindow的时候,延迟一段时间再将其添加顶部,我有种蛋蛋的忧伤啊!!
#import "XMGTopWindow.h" @implementation XMGTopWindow static UIWindow *window_; + (void)initialize
{
window_ = [[UIWindow alloc] init];
window_.frame = CGRectMake(, , XMGScreenW, );
window_.windowLevel = UIWindowLevelAlert;
[window_ addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(windowClick)]];
} + (void)show
{
window_.hidden = NO;
} + (void)hide
{
window_.hidden = YES;
} /**
* 监听窗口点击
*/
+ (void)windowClick
{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[self searchScrollViewInView:window];
} + (void)searchScrollViewInView:(UIView *)superview
{
for (UIScrollView *subview in superview.subviews) {
// 如果是scrollview, 滚动最顶部
if ([subview isKindOfClass:[UIScrollView class]] && subview.isShowingOnKeyWindow) {
CGPoint offset = subview.contentOffset;
offset.y = - subview.contentInset.top;
[subview setContentOffset:offset animated:YES];
} // 继续查找子控件
[self searchScrollViewInView:subview];
}
}
@end
最新文章
- Python读取中文txt文件错误:UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character
- php : 工厂类演示
- spring-flex
- 【JavaScript】n++ VS ++n
- [Android1.5]TextView跑马灯效果
- 2014 Multi-University Training Contest 1 - J Rating
- IOS开发苹果官方Sample Code及下载地址
- js-ES6学习笔记-Set结构和Map结构
- hive1.2.2部署
- OSChinaclient源代码学习(1)--Android与Server的交互
- Linq To EF
- Factor Pattern----工厂模式
- xls 打乱序列 -和给拼接字符串加上双引号
- [Alpha阶段]第二次Scrum Meeting
- org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open con
- C# 之设计原则
- python中的split、rsplit、splitlines
- java常量
- Eclipse添加Junit测试
- 20135337朱荟潼 Linux第一周学习总结——计算机是如何工作的