Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 自定義點擊狀態欄返回

自定義點擊狀態欄返回

編輯:關於Android編程

點擊屏幕最上方狀態欄(status)時,如果當前是tableview或者是可以滾動的控件,就可以滾動到最上方的位置;

#import "LZPStatuesClickWindow.h"
//定義一個全局變量
//整個程序的生命周期都存在;
UIWindow * _statueWindow;
@interface LZPStatuesClickWindow ()
@end

@implementation LZPStatuesClickWindow

+(void)show{
    //需要在info.plst中設置status的管理(不讓系統管理status);
    //1.自定義window的級別要高
    //2.自定要window需要強引用
    //3.如果點擊一個類,沒有調用該類的方法,則看一下這個對象是什麼類型;(如果對象和方法的類不是同一個類,就不會調用);

    UIApplication * application = [UIApplication sharedApplication];
   //該處請注意,創建一個窗口,如果是使用window創建,在被點擊的時候,就不會響應該類中的touch方法;該類是繼承UIWindow,所以在外面調用該方法的時候是該類調用,所以這裡使用self,即該類本身;

    UIWindow * statueWindow = [[self alloc] initWithFrame:application.statusBarFrame];
//設置級別,不設置會顯示在下方,被主窗口蓋住;
    statueWindow.windowLevel  = UIWindowLevelAlert;
//窗口需要設置根控制器
    statueWindow.rootViewController = [[UIViewController alloc] init];
//當有多個窗口顯示的的時候,非主窗口就會隱藏,在這裡設置顯示
    statueWindow.hidden = NO;

   //設置窗口屬性,下面會用到;
    _statueWindow = statueWindow;

}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UIWindow * keyWidow = [UIApplication sharedApplication].keyWindow;
    [self setViewController:keyWidow];

}
//該方法遍歷UIApplication的主窗口下所有的子控件,知道遍歷出我們想要的;
//使用遞歸,一層一層的遍歷
-(void)setViewController:(UIView *)view{
    for (UIView * childView in view.subviews) {

        if ([childView isKindOfClass:[UITableView class]]) {
            //強制轉換一下,才會有tableview的屬性
            UITableView * tableView = (UITableView *)childView;

            [tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:YES];
        }
        [self setViewController:childView];
    }
}

在APPDelegate中調用:

application.statusBarHidden = NO;

一定要將系統的狀態欄顯示,因為當有多個窗口的時候系統狀態欄會隱藏,默認是顯示的

 [LZPStatuesClickWindow show];
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved