如何识别哪个事件通过nextResponder传递给父级?

时间:2012-03-02 03:31:40

标签: ios events

我有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");
}

1 个答案:

答案 0 :(得分:0)

对于快速而肮脏的方式,您可以使用ObjC运行时的objc_setAssociatedObjectobjc_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的文档。