PPTopMostController 0.0.1

PPTopMostController 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

未指派 维护。



  • Marian Paul

PPTopMostControllerProtocol

本项目的目的是简化 "屏幕上哪个控制器/视图是显示的" 这背后的代码。

有时,您可能希望将事件分发给当前显示的控制器。例如

  • 类似于资源下载完成的通知视图
  • 一个告知您应用程序状况(在线或离线)的视图
  • 等等

对于这些包含通知视图的用法,您可能希望不费吹灰之力地将视图显示到显示的控制器上。更重要的是,即使您从导航控制器中推送新的视图,视图也应该保持显示。

为了清楚起见,本协议仅为您提供获取当前显示的控制器的方法。至于如何利用这个工具去做有益的事,则由您自行决定。示例代码中提供了一个 NotificationView 的示例。请同时参阅 RZNotificationView(即将推出)

请注意,PPTopMostController 也支持模态控制器。

在 MacBuildServer 中尝试

安装

安装 PPTopMostController 最简单的方法是通过 CocoaPods 包管理器,因为它非常灵活并且易于安装。

老式方法

  1. 将 PPTopMostController 添加为子模块到您的项目中
$ cd /path/to/MyApplication
# If this is a new project, initialize git...
$ git init
$ git submodule add [email protected]:ipodishima/PPTopMostController.git vendor/PPTopMostController
$ git submodule update --init --recursive
  1. 在您的 XCode 项目中,将 PPTopMostController-Files 文件夹中的所有文件拖放到您的项目中。
  2. UIViewController+PPTopMostController.h 文件导入您的 PCH 文件或 AppDelegate 文件。

您就可以使用了。

ARC 支持

PPTopMostController 不关心 ARC 和非 ARC。想做什么就做什么吧!

兼容性

iOS 4 至 iOS 6

用法

获取当前显示的控制器

要获取显示在最上面的控制器,只需这样做

UIViewController *c = [UIViewController topMostController];

完成。

支持自定义容器

示例中使用PPRevealSideViewController

  1. 在您的容器上创建一个类别:YourContainer+PPTopMostController.h(别忘了在某处导入头文件)
  2. 导入PPTopMostController协议:#import "PPTopMostControllerProtocol.h"
  3. 采用该协议
    @interface YourContainer (PPTopMostController) <PPTopMostControllerProtocol>
  1. 遵守它

    • (UIViewController )visibleViewController { return /您想要设置为顶层的控制器。请注意,PPTopMostController会遍历控制器层次结构并找到遵守PPTopMostControllerProtocol的控制器;}

那就这么多了!

为什么是PPTopMostController?

假设您有一个下载数据的管理器,还有一个在发生错误时触发通知的视图。

使用代理

(这与使用完成块的思想类似)您会声明一个协议

@protocol DLManagerDelegate
- (void) dlManager:(DLManager*)manager didFailWithError:(NSError*)error;
@end

并为代理创建一个属性

@property (nonatomic, weak) id<DLManagerDelegate> delegate;

在每个控制器中,您都会采用该协议

@interface AController : UIViewController <DLManagerDelegate>

并实现该方法

- (void) dlManager:(DLManager*)manager didFailWithError:(NSError*)error
{
    [NotificationView showFromController:self ...];
}

在失败时通知代理

- (void) weFail:(NSError*)error
{
    [self.delegate dlManager:self didFailWithError:error];
}

此外,如果更改显示的控制器,请正确重新分配代理

[[DLManager shared] setDelegate:self];

无聊

使用通知

您会声明通知

extern NSString *const DLManagerDidFailNotification;

+

NSString *const DLManagerDidFailNotification = @"DLManagerDidFailNotification";

在失败时发布它

- (void) weFail:(NSError*)error
{
    NSDictionary *userInfo = @{@"error": error};
    [[NSNotificationCenter defaultCenter] postNotificationName:DLManagerDidFailNotification object:nil userInfo:userInfo];
}

并在每个控制器中添加观察者

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(dispatchNotificationFail:)
                                                 name:DLManagerDidFailNotification
                                               object:nil];   

别忘了移除观察者

并实现该方法

- (void) dispatchNotificationFail:(NSNotification*)notif
{
    [NotificationView showFromController:self ...];
}

无聊

使用PPTopMostController

只需实现DLManager中的weFail:方法

- (void) weFail:(NSError*)error
{
    [NotificationView showFromController:[UIViewController topMostController] ...];
}

不无聊

许可

本代码由Marian Paul代表iPuP SARL以MIT许可证发布。

请在您项目中使用此协议时告诉我!如果您用PPTopMostController构建了很好的控件,请让我知道,我会将链接包含在readme中。

问候
Marian Paul,又名ipodishima

http://www.ipup.pro