【问题标题】:Pass a NSDictionary as parameter to UITapGestureRecognizer将 NSDictionary 作为参数传递给 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?
  • 选择器的手势与您注意到的一样。为什么不直接创建一个方法可以访问的数组?
  • 一种选择是使其成为一个属性。但我可能还需要传递更多参数。
  • 创建一个选项对象,其中包含您的数组和任何其他选项,并设置为属性并从方法访问它。

标签: ios objective-c nsarray uitapgesturerecognizer


【解决方案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)")} }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-08
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2017-12-12
      相关资源
      最近更新 更多