我有UITableViewCells,每个都有几个UIImageViews。我想将事件传递给父UITableViewController,以便它可以对其进行操作。如何将信息发送回UITableViewController以让它知道哪个UIImageView触发了该事件。使用下面的代码,当任何子UITableViewCells触发事件时,似乎触发了UITableViewController touchesEnded。有什么办法在UIEvent中传递信息吗?
有没有更好的方法来处理事件?
//UITableViewCell
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if ([touch view] == imageView)
{
[[self nextResponder] touchesEnded:touches withEvent:event];
}
}
//UITableViewController
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
NSLog(@"clicked");
}
答案 0 :(得分:0)
对于快速而肮脏的方式,您可以使用ObjC运行时的objc_setAssociatedObject
和objc_getAssociatedObject
。
#import <objc/runtime.h>
设置对象:
// static char key;
objc_setAssociatedObject(event, &key, self, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
并获取对象:
id yourInterestObj = objc_getAssociatedObject(event, &key);
但我不推荐这种方式,它可能会破坏MVC。我认为您应该使用Responder Chain模式来处理这种情况,请查看-sendAction:to:from:forEvent:
UIApplication
的文档。