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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM