RaisinToast提供消息窗口层和默认的"toast"视图控制器,非常适合在您的整个应用程序中显示错误、警告和反馈。把它想象成将Android Toast的有用消息概念带到iOS上。
RaisinToast容易配置并最小化了您需要添加到应用中的通知代码,以便实现一致的全局消息。
在初始设置之后,如果您想自定义消息样式,您不必触及显示消息的任何视图控制器 - 只需将应用代理指向您新的RZErrorMessagingViewController子类,整个应用程序就会焕然一新。
如果您没有使用CocoaPods,请将Classes/和Assets/文件夹复制到您的项目中,并按照概述下的说明操作。
一个示例项目在Example目录中可用。该示例项目使用CocoaPods,可以通过运行以下命令从临时目录打开:
pod try RaisinToast
或者,您可以通过在项目根目录下运行以下命令来配置示例:
cd Example
pod install
然后,打开RaisinToast.xcworkspace
并查看示例!
注意:以上步骤假设已安装CocoaPods gem。
如果您未安装CocoaPods,请按照这里的说明进行操作。
在应用代理实现中导入RZMessagingWindow
#import "RZMessagingWindow.h";
在实现中,将设置代码添加到applicationDidBecomeActive:
并且它必须在[self.window makeKeyAndVisible]
之后运行
-(void)applicationDidBecomeActive:(UIApplication *)application
{
[self.window makeKeyAndVisible]; // Must come first
[RZErrorMessenger setDefaultMessagingWindow:[RZMessagingWindow defaultMessagingWindow]];
}
要在应用的任何位置显示第一条通知,请调用RZErrorMessenger类方法
[RZErrorMessenger displayErrorWithTitle:@"FYI" detail:@"This is a test of the emergency broadcast system"];
这将以提供的标题和详细内容显示默认的信息级别通知。
RZErrorMessengerLevel
是一个包含四个通知"主题"的枚举。
要显示通知并指定强度,请调用displayErrorWithTitle:detail:level。
[RZErrorMessenger displayErrorWithTitle:@"Whoops!" detail:@"Something went horribly wrong and we accidentally cut off the wrong leg" level:kRZErrorMessengerLevelError];
[RZErrorMessenger displayErrorWithTitle:@"Hang on a second" detail:@"Did you know this was happening?" level:kRZErrorMessengerLevelWarning];
[RZErrorMessenger displayErrorWithTitle:@"FYI" detail:@"This is a test of the emergency broadcast system" level:kRZErrorMessengerLevelInfo];
[RZErrorMessenger displayErrorWithTitle:@"Great job!" detail:@"You did it! You did the thing you were supposed to do!" level:kRZErrorMessengerLevelPositive];
如您所见,消息级别控制消息外观,但RZMessageStrength允许您控制消息是模态(强大)还是允许触摸穿透到底层的 UIWindow(弱)。
RZMessageStrength的第二个组件是消息是否会在点击时自动消失或保持在屏幕上供您处理消失。大多数时候,.AutoDismiss RZMessageStrength选项将是您想要的。
当您可能需要在消息消失之前进行额外的处理时(例如,UI编辑或模型更新),手动选项很有用。
另一个例子是,如果您想逐一显示一系列消息,然后要么一次性剥去所有消息,要么使用单个动画块删除所有消息。
要使用消息强度,请使用便利方法errorWithDisplayTitle:detail:error来创建配置为RZErrorMessenger的NSError。
NSError *strongError = [RZErrorMessenger errorWithDisplayTitle:@"World's strongest error" detail:@"Coming to an iPhone near you soon." error:nil];
在这里,我们将nil作为错误对象传递,但如果您确实正在响应该出错,可以使用该对象提取错误域并将其传递以帮助调试。
接下来,我们展示错误并提供消息强度,使用displayError:withStrength:animated。
[RZErrorMessenger displayError:strongError withStrength:kRZMessageStrengthStrongAutoDismiss animated:YES];
虽然我们不建议这样做,但您可以使用Raisin Toast来呈现标准的NSError对象。这可能在调试期间很有用,但通常您不希望向用户显示任何系统生成的错误,因为它们是为开发者设计的。
如果您计划支持多种错误窗口样式或自定义,则需要以不同的方式配置您的应用代理。
在应用代理中添加到导入:
@class RZMessagingWindow;
向应用代理添加一个新属性:
@property (strong, nonatomic) RZMessagingWindow *errorWindow;
在您的代理实现中,将设置代码添加到applicationDidBecomeActive:中,并且它必须在[self.window makeKeyAndVisible]之后
-(void)applicationDidBecomeActive:(UIApplication *)application
{
[self.window makeKeyAndVisible]; // Must come first
if ( self.errorWindow == nil ) {
self.errorWindow = [RZMessagingWindow defaultMessagingWindow];
[RZErrorMessenger setDefaultMessagingWindow:self.errorWindow];
}
}
请子类化RZErrorMessagingViewController:
@interface MyErrorMessagingViewController : RZErrorMessagingViewController <RZMessagingViewController>
重写init并提供每种错误级别的替代颜色定义:
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if ( self ) {
self.colorForLevelDictionary = @{
kRZLevelError :[UIColor redColor],
kRZLevelInfo : [UIColor blueColor],
kRZLevelWarning : [UIColor orangeColor],
kRZLevelPositive : [UIColor greenColor]
};
self.errorMessagingViewVerticalPadding = -200.0f;
}
return self;
}
在应用代理中使用您的自定义类:
self.errorWindow = [RZMessagingWindow messagingWindow];
self.errorWindow.messageViewControllerClass = [MyErrorMessagingViewController class];
在您的头文件中声明对RZMessagingViewController协议的支持:
@interface MyAmazingMessagingViewController : UIViewController <RZMessagingViewController>
在您的实现文件中实现所需的方法:
- (void)rz_configureWithError:(NSError *)error;
- (void)rz_presentAnimated:(BOOL)animated completion:(RZMessagingWindowAnimationCompletionBlock)completion;
- (void)rz_dismissAnimated:(BOOL)animated completion:(RZMessagingWindowAnimationCompletionBlock)completion;
可选地提供错误消息视图控制器的约束,以控制定位或出现/消失:
- (void)rz_configureLayoutForContainer:(UIView *)container;
在应用代理中使用您的自定义类:
self.errorWindow = [RZMessagingWindow messagingWindow];
self.errorWindow.messageViewControllerClass = [MyAmazingMessagingViewController class];
在示例项目中,您会注意到我们无缝地在默认设置、自定义颜色方案和将所有消息尝试转换为UIAlertView的有趣版本之间切换。这是为了展示Raisin Toast的灵活性。
无需更新承载您应用程序核心内容的任何一个视图控制器,您就可以设置defaultMessagingWindow的消息ViewControllerClass属性,这样消息就会焕然一新。您可以在自己的应用程序中自由使用示例项目中提供的子类。
如果您想使用多个样式,可能基于应用的部分或视图控制器的展示样式的不同主题,在调用显示错误之前,您可能需要设置 messagingWindow 的 messageViewControllerClass。
[[RZMessagingWindow messagingWindow] setMessageViewControllerClass:[RZAmityvilleErrorMessagingViewController class]];
[RZErrorMessenger displayErrorWithTitle:@"Gross!" detail:@"Flies everywhere!" level:kRZErrorMessengerLevelError];
要获取更详细的文档,请参阅 CococaDocs 页面。
adamhrz,[email protected],@earnshavian
arrouse,[email protected],@arrouse
RaisinToast 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。