Bri*_*ian 1 objective-c selector uikit ios performselector
我正在寻找一个具有类似于UIButton工作方式的"事件列表"的类,您可以在其中添加多个目标和选择器.
写一个很容易,但如果Apple已经提供了解决方案,我宁愿使用它而不是维护更多的代码.
注意:
这是一个非可视类,所以我真的不想使用任何UI特定的东西.
编辑:
我最终使用堆叠的NSDictionary实例滚动我自己的基本事件调度程序类.
@implementation ControllerBase
@synthesize eventHandlers;
- (id) init
{
self = [super init];
if (self!=NULL)
{
NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[self setEventHandlers: dict];
[dict release];
}
return self;
}
-(void) addTarget: (id) target action:(SEL) selector forEvent:(NSString*) eventName
{
NSString* selectorString = NSStringFromSelector(selector);
NSMutableDictionary* eventDictionary = [eventHandlers objectForKey:eventName];
if (eventDictionary==NULL)
{
eventDictionary = [[NSMutableDictionary alloc] init];
[eventHandlers setValue:eventDictionary forKey:eventName];
}
NSArray* array = [NSArray arrayWithObjects:selectorString,target, nil];
[eventDictionary setValue:array forKey: [target description]];
}
-(void) removeTarget: (id) target action:(SEL) selector forEvent:(NSString*) eventName;
{
NSMutableDictionary* eventDictionary = [eventHandlers objectForKey:eventName];
//must have already been removed
if (eventDictionary!=NULL)
{
//remove event
[eventDictionary removeObjectForKey:target];
//remove sub dictionary
if ([eventDictionary count]==0)
{
[eventHandlers removeObjectForKey:eventName];
[eventDictionary release];
}
}
}
-(void) fireEvent:(NSString *)eventName
{
NSMutableDictionary* eventDictionary = (NSMutableDictionary*) [eventHandlers objectForKey:eventName];
if (eventDictionary!=NULL)
{
for(id key in eventDictionary)
{
NSArray* eventPair= [eventDictionary valueForKey:key];
if (eventPair!=NULL)
{
NSString* selectorString = (NSString*)[eventPair objectAtIndex:0];
//remove colon at end
SEL selector = NSSelectorFromString ( [selectorString substringWithRange: NSMakeRange(0, [selectorString length]-1)] ) ;
id target = [eventPair objectAtIndex:1];
[target performSelector:selector];
}
}
}
}
-(void) dealloc
{
for(id key in eventHandlers)
{
NSMutableDictionary* eventDictionary = (NSMutableDictionary*) [eventHandlers objectForKey:key];
for(id key in eventDictionary)
{
[eventDictionary removeObjectForKey:key];
}
[eventDictionary release];
}
[eventHandlers release];
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
UIButton是.的子类UIControl. UIControl管理每个控制事件的目标/操作列表.它有一组预定义的控制事件,比如UIControlEventTouchUpInside和UIControlEventValueChanged.每个控制事件由掩码中的一个位表示.位掩码有4位保留用于app定义的事件(UIControlEventApplicationReserved = 0x0F000000).
如果UIControl没有做你想做的事,你需要推出自己的事件管理.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |