我在 NSLog 中的 – tableView:didSelectRowAtIndexPath 方法中打印了 UITableviewCell 的手势
<UIScrollViewPanGestureRecognizer: 0x11e92080; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO; view = <UITableViewCellScrollView 0x11e94bf0>; target= <(action=handlePan:, target=<UITableViewCellScrollView 0x11e94bf0>)>>
我已将此 UIScrollViewPanGestureRecognizer 分配给 UIGestureRecognizer 以访问它的属性,如下所示,
UIGestureRecognizer *myGes=[temp.gestureRecognizers objectAtIndex:1];
我能够访问“myGes”的所有属性
myGes.state;
myGes.cancelsTouchesInView;
myGes.delaysTouchesEnded;
myGes.view;
除了一个名为 target 的属性。
是否有可能访问该财产?因为我需要执行该操作。
如有任何意见或建议,我们将不胜感激。
提前谢谢您。
有一种方法可以获取该属性的访问权限
target
,但我不确定这种方法是否会通过苹果的审批流程。
NSMutableArray *targets = [myGes valueForKeyPath:@"_targets"];
id targetContainer = targets[0];//get first target for example
id targetOfMyGes = [targetContainer valueForKeyPath:@"_target"];
NSLog(@"%@", targetOfMyGes );//you can see reference for target object
谢谢neilco - 他的回答有助于创建解决方案。
注意:对象的确切类
targetOfMyGes
需要您自己定义。默认情况下它 id
- 适用于任何对象类别。
UIGestureRecognizer
内部维护着一个目标数组。没有对该数组的公共访问。
我今天遇到了这个问题,意识到我可以简单地使用 UIGestureRecognizer 的
delegate
,因为这与我情况下的主要目标相同。
我有一个不同的解决方案,这对我有用。 这更多的是设计上的改变……您无法从捕获的手势访问目标。 因此,在着陆发生时和平移开始之前保留对对象的引用。
@property (nonatomic, strong) UIButton *myTouchedButton; // reference to button
(void)init
{
...
[card.button addTarget:self action:@selector(cardTouchDownInside:) forControlEvents:UIControlEventTouchDown];
...
}
-(void)cardTouchDownInside:(id)sender
{
NSLog(@"touch down on object");
self.myTouchedButton = (UIButton*)sender;
}