我已经阅读了很多有关 SO 上的手势识别器的文章 - 并设法编写了一个工作代码,当在 UIImage 上识别出长按时,会出现一个操作表:
{ ...
UILongPressGestureRecognizer *longPressWall = [[[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(deleteImage:)] autorelease];
longPressWall.minimumPressDuration = 0.4;
l.userInteractionEnabled=YES;
[l addGestureRecognizer:longPressWall];
... }
-(void)deleteImage:(UILongPressGestureRecognizer*)sender {
if(UIGestureRecognizerStateBegan == sender.state) {
UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:@"Close" destructiveButtonTitle:@"Delete Screenshot" otherButtonTitles: nil];
[as showInView:masterView];
[as release];
}
}
因此,在这种情况下,向选择器 deleteImage:
发送信息有点棘手。
我想在调用 deleteImage 时向服务器发送 HTTP 请求,因此我需要来自 View 的一些信息。
有没有办法将信息存储到 UIImageView
中并从 sender.view.myinfo
中检索(例如)?
最佳答案
通过扩展,您可以将属性添加到 UIView
存储您的关联值,如下所示:
import Foundation
import ObjectiveC
extension UIImageView
{
struct Static {
static var key = "key"
}
var myInfo:AnyObject? {
get {
return objc_getAssociatedObject( self, &Static.key ) as AnyObject?
}
set {
objc_setAssociatedObject( self, &Static.key, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
}
现在您可以在代码的任何地方执行此操作
let anImageView = UIView()
// set your new property on any UIView:
anImageView.myInfo = <some object>
// get your proeprty from any UIView
myImage = anImageView.myInfo
上一个答案(相同的代码,但在 Objective-C 中)
查看objc_setAssociatedObject()
在 <objc/runtime.h>
我会将其实现为一个类别..(ARC 风格)
#import <objc/runtime.h>
@interface UIImageView (MyInfo)
@property ( nonatomic, strong ) id myInfo ;
@end
@implementation UIImageView (MyInfo)
-(void)setMyInfo:(id)info
{
objc_setAssociatedObject( self, "_myInfo", info, OBJC_ASSOCIATION_RETAIN_NONATOMIC ) ;
}
-(id)myInfo
{
return objc_getAssociatedObject( self, "_myInfo" ) ;
}
@end
现在你可以这样做了:
UIImage * myImage ;
myImage.myInfo = <some object>
关于iphone - 在 UIView 中存储额外的关联信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594610/