此 pod 被
SHUIKitBlocks
使用,作为许多组件的一部分,用于补全 Foundation、UIKit、CoreLocation、GameKit、MapKit 和 iOS 应用程序架构其他方面的漏洞。
当一个控件的控制一旦丢失,相关的块和事件会自动移除,因此没有必要清理 - Swizzle Free(™)
pod 'SHControlBlocks'
将这些放在特定的文件中或项目前缀文件中
#import "UIControl+SHControlBlocks.h"
或者
#import "SHControlBlocks.h"
#pragma mark -
#pragma mark Add block
-(void)SH_addControlEvents:(UIControlEvents)controlEvents
withBlock:(SHControlEventBlock)theBlock;
-(void)SH_addControlEventTouchUpInsideWithBlock:(SHControlEventBlock)theBlock;
#pragma mark -
#pragma mark Remove block
-(void)SH_removeControlEventTouchUpInside;
-(void)SH_removeBlocksForControlEvents:(UIControlEvents)controlEvents;
-(void)SH_removeControlEventsForBlock:(SHControlEventBlock)theBlock;
-(void)SH_removeAllControlEventsBlocks;
#pragma mark -
#pragma mark Helpers
-(NSSet *)SH_blocksForControlEvents:(UIControlEvents)theControlEvents;
-(NSSet *)SH_controlEventsForBlock:(SHControlEventBlock)theBlock;
#pragma mark -
#pragma mark Properties
#pragma mark -
#pragma mark Getters
@property(nonatomic,readonly) BOOL SH_isTouchUpInsideEnabled;
@property(nonatomic,readonly) NSDictionary * SH_controlBlocks;
使用 SHControlBlocks,您可以设置自动删除的块而不是使用选择器
[self.btnFirst SH_addControlEvents:UIControlEventTouchDown withBlock:^(UIControl *sender) {
[weakSelf performSegueWithIdentifier:@"second" sender:nil];
NSLog(@"first");
}];
或者如果您想要添加额外的块
[btnSecond SH_addControlEvents:UIControlEventTouchUpInside withBlock:counterBlock];
[btnSecond SH_addControlEvents:UIControlEventTouchDown withBlock:counterBlock];
适用于 touchUpInside 的便利选择器
[button SH_addControlEventTouchUpInsideWithBlock:^(UIControl *sender) {
[button removeFromSuperview]; //this will also remove the block :)
}];
[btnSecond SH_removeControlEventsForBlock:counterBlock];
[btnSecond SH_removeBlocksForControlEvents:UIControlEventTouchUpInside];
[btnSecond SH_removeControlEventTouchUpInside];
[button SH_removeAllControlEventsBlocks];
[button SH_addControlEventTouchUpInsideWithBlock:blockOne];
[button SH_addControlEventTouchUpInsideWithBlock:blockTwo];
[button SH_addControlEventTouchUpInsideWithBlock:blockThree];
NSSet * controlBlocks = button.SH_controlBlocks[@(UIControlEventTouchUpInside)];
NSAssert(button.SH_isTouchUpInsideEnabled, @"Touch up inside should be enabled");
NSAssert(button.SH_controlBlocks.count == 1, @"There should be one event");
NSAssert(controlBlocks.count == 3, @"There should be three blocks");
如果您在项目中使用了 SHControlBlocks,我很乐意了解相关信息。
邮箱:[email protected]
Twitter:@seivanheidari
SHControlBlocks 是 © 2013 Seivan,可在 MIT 许可证 下自由分发。查看 LICENSE.md
文件。