iOS開源庫PKRevealController的使用

自學iOS也有一段時間了,期間發現iOS和Android同樣,有不少很是優秀的開源庫可使用。但無奈國內幾乎沒有太多關於此方面資料,惟有在Github上摸索。今天就寫一篇關於PKRevealController的使用。本文章假定你已經具備必定的Objective-C開發技術技術,若須要入門教程請諮詢谷歌君。 git

PKRevealController是什麼

PKRevealController是由ZUUIRevealController改進而來,是一個簡單、漂亮的開源庫。實現了Facebook iOS客戶端左右兩邊側邊菜單欄的效果(以下圖) github

pictures pictures pictures

其實,在Google上搜索『facebook like side menu』能夠搜到一大堆能夠實現的方案,其中有很多很是不錯的實現方式。但我這篇文章中選擇PKRevealController來演示。由於看了幾種不一樣的實現方案以後,發現仍是PKRevealController的實現方式比較簡單、易用,並且最終效果和Facebook的效果高度一致。 app

其Github主頁上對於它的說明以下: ide

PKRevealController (ex. ZUUIRevealController) is a delightful view controller container for iOS, enabling you to present multiple controllers on top of one another. 佈局

其主要的特色有: atom

  • Proper view controller containment usage
  • Elegant block API
  • Supports both left and right sided view presentation
  • Works on both iPhones & iPads
  • Supports landscape & portrait orientations

PKRevealController使用概要

  1. Github下載該項目,找到其中的PKRevealController/Controller文件夾,把它拖到項目中去就能夠了 spa

  2. 在任何一個你想要使用它的地方記得導入 #import "PKRevealController.h" .net

  3. 在你的項目AppDelegate.h裏面聲明一個PKRevealController對象 設計

    @property (nonatomic, strong) PKRevealController *revealController;

    以後在AppDelegate.m中適當的初始化(後面詳解) code

    self.revealController = [PKRevealController revealControllerWithFrontViewController:frontViewController leftViewController:leftViewController options:nil];
  4. 在左邊或者右邊菜單欄裏面現實內容,並在其中實現點擊之後的切換效果便可

PKRevealController使用詳解

爲了可以演示如何使用PKRevealController,簡單新建一個以下圖所示的項目。運行以後能夠看到主界面,在其主界面左上角導航欄具備一個按鈕,點擊以後便可查看菜單。菜單種有兩項分別位:Home、Profile。點擊Home返回主頁面,點擊Profile則顯示我的信息頁面。

pictures pictures pictures

  1. 打開Xcode並新建一個EmptyApplication,將其命名爲PKRevealControllerDemo

  2. 下載PKRevealController項目並將其中的PKRevealController/Controller文件夾複製到項目中

  3. 打開RevealControllerAppDelegate.h文件,在其中引入#import "PKRevealController.h",以後聲明一個PKRevealController類型的對象命名爲revealController

    #import <UIKit/UIKit.h> #import "PKRevealController.h"  @interface RevealControllerAppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong,nonatomic) PKRevealController *revealController; @end
  4. 新建用以顯示主界面的Controller,將其命名爲MainFaceController。爲了簡單起見,界面設計等使用xib佈局就好。在界面上隨便拖動一個組建,並顯示相關數據。爲了簡便,我在界面上放置一個UILabel組件,並在其中顯示問候信息。核心代碼以下:

    - (void)viewDidLoad
    {
        [super viewDidLoad]; //設置當前標題 [self setTitle:@"Home"]; //設置標題欄上左邊的按鈕 UIBarButtonItem *btnLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showLeftView)]; self.navigationItem.leftBarButtonItem = btnLeft;
    } //按鈕點擊事件 - (void) showLeftView 
    {
        [self.navigationController.revealController showViewController:self.navigationController.revealController.leftViewController];
    }
  5. 新建用以顯示左邊菜單欄的Controller,將其命名爲LeftFaceController。通常狀況下,菜單欄可使用UITableView實現。表格數據填充參考:

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    { return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 2;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { static NSString *CellIdentifier = @"CellReuseIndentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) 
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        } switch (indexPath.row) 
        { case 0:
                [cell.textLabel setText:@"Home"]; break; case 1:
                [cell.textLabel setText:@"Profile"]; break;
        } return cell;
    }

    表格中點擊事件參考:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    { UINavigationController *frontViewController = nil; switch (indexPath.row)
        { case 0: //home frontViewController = [[UINavigationController alloc] initWithRootViewController:self.mainFaceController]; break; case 1: //profile frontViewController = [[UINavigationController alloc] initWithRootViewController:self.profileViewController]; break;
        }
        [self.revealController setFrontViewController:frontViewController];
        [self.revealController showViewController:self.revealController.frontViewController];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
  6. 新建用以顯示我的信息頁面的Controller,將其命名爲ProfileViewController,其內容大體於MainFaceController相似,所以就再也不詳細描述。(請看代碼)

  7. 回到RevealControllerAppDelegate.m,在其中並初始化主界面MainFaceController、左邊菜單欄LeftFaceController、PKRevealController等對象,並將其做爲rootViewController展現給用戶

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //主界面 MainFaceController* mainFaceController = [[MainFaceController alloc] init]; //菜單欄 LeftFaceController* leftFaceController = [[LeftFaceController alloc] init]; //構造PKRevealController對象 UINavigationController *frontViewController = [[UINavigationController alloc] initWithRootViewController:mainFaceController]; self.revealController = [PKRevealController revealControllerWithFrontViewController:frontViewController leftViewController:leftFaceController options:nil]; //將其PKRevealController對象做爲RootViewController self.window.backgroundColor = [UIColor whiteColor]; self.window.rootViewController = self.revealController;
        [self.window makeKeyAndVisible]; return YES;
    }

完整代碼下載:

  1. https://git.oschina.net/barrywey/PKRevealController-Demo

  2. https://github.com/barrywey/PKRevealController-Demo

相關文章
相關標籤/搜索