将 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
【问题讨论】:
你不能创建一个属性并访问它吗? 并符合NSArray
或NSDictionary
?
选择器的手势与您注意到的一样。为什么不直接创建一个方法可以访问的数组?
一种选择是使其成为一个属性。但我可能还需要传递更多参数。
创建一个选项对象,其中包含您的数组和任何其他选项,并设置为属性并从方法访问它。
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Kendo UI 将参数传递给 HttpHandler?
Kendo UI - 将参数传递给 read().data() 中的 JS 函数