将 NSDictionary 作为参数传递给 UITapGestureRecognizer

Posted

技术标签:

【中文标题】将 NSDictionary 作为参数传递给 UITapGestureRecognizer【英文标题】:Pass a NSDictionary as parameter to UITapGestureRecognizer 【发布时间】:2013-04-19 17:36:19 【问题描述】:

我想将NSArray 作为参数传递给UITapGestureRecognizer 并在downloadOptionPressed 方法中访问它。我该怎么做?

NSArray

NSArray *parameters = [NSArray arrayWithObjects:currentTrack, nil];

创建UITapGestureRecognizer

UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)];
    [downloadOption addGestureRecognizer:downloadOptionPressed];

downloadOptionPressed 方法

-(void)downloadOptionPressed:(UIGestureRecognizer*)recognizer


【问题讨论】:

你不能创建一个属性并访问它吗? 并符合NSArrayNSDictionary? 选择器的手势与您注意到的一样。为什么不直接创建一个方法可以访问的数组? 一种选择是使其成为一个属性。但我可能还需要传递更多参数。 创建一个选项对象,其中包含您的数组和任何其他选项,并设置为属性并从方法访问它。 【参考方案1】:

您是否有理由不能将信息存储在拥有的视图控制器中?是为了抽象吗?

您始终可以扩展 UITapGestureRecognizer 以携带更多数据:

@interface UserDataTapGestureRecognizer : UITapGestureRecognizer
@property (nonatomic, strong) id userData;
@end

@implementation UserDataTapGestureRecognizer
@end

...

UserDataTapGestureRecognizer *downloadOptionPressed =
    [[UserDataTapGestureRecognizer alloc] initWithTarget:self
    action:@selector(timeFrameLabelTapped:)];
downloadOptionPressed.userData = parameters;

...

- (void)downloadOptionPressed:(UserDataTapGestureRecognizer *)recognizer 
    NSArray *parameters = recognizer.userData;

【讨论】:

【参考方案2】:

您可以使用关联对象与点击手势实例一起传递参数。

你可以查看这个objective-c-associated-objects

它会解决你的问题。

【讨论】:

多么棒的功能,很少讨论!比子类化要干净得多。【参考方案3】:

有时传递一个索引就足够了,在这种情况下,标签属性视图是你的盟友。在下面的示例中,我假装将长按添加到 tableview 单元格中。而一旦事件被触发,我只想知道哪个单元格被长按了:

    let longPress = UILongPressGestureRecognizer(target: self, action: "longPress:")
    cell.tag = indexPath.row
    cell.addGestureRecognizer(longPress)

...

func longPress(guesture: UILongPressGestureRecognizer) 
    print("\(guesture.view!.tag)") 

【讨论】:

以上是关于将 NSDictionary 作为参数传递给 UITapGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章

通过 UI 将参数传递给 Airflow 的作业

如何使用 Kendo UI 将参数传递给 HttpHandler?

Kendo UI - 将参数传递给 read().data() 中的 JS 函数

Kendo UI - 将参数传递给read()中的JS函数.data()

将文件作为参数传递给 Docker 容器

当我们将对象作为参数传递给方法时,为啥会调用复制构造函数?