在iOS中获取UIGestureRecognizer的Action

问题描述 投票:0回答:4

我在 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 的属性。

是否有可能访问该财产?因为我需要执行该操作。

如有任何意见或建议,我们将不胜感激。

提前谢谢您。

ios objective-c uitableview uigesturerecognizer
4个回答
10
投票

有一种方法可以获取该属性的访问权限

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
- 适用于任何对象类别。


3
投票

UIGestureRecognizer
内部维护着一个目标数组。没有对该数组的公共访问。


0
投票

我今天遇到了这个问题,意识到我可以简单地使用 UIGestureRecognizer 的

delegate
,因为这与我情况下的主要目标相同。


-3
投票

我有一个不同的解决方案,这对我有用。 这更多的是设计上的改变……您无法从捕获的手势访问目标。 因此,在着陆发生时和平移开始之前保留对对象的引用。

@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;
}
© www.soinside.com 2019 - 2024. All rights reserved.