我一直在阅读很多关于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请求,所以我需要从视图中获取一些信息。
是否有将信息存储到UIImageView
并从sender.view.myinfo
检索(例如)?
谢谢!
答案 0 :(得分:20)
通过扩展程序,您可以向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>
答案 1 :(得分:5)
显而易见的方法是使用tag属性。如果您需要更多信息,可以随时继承UIImageView并添加额外的属性。
答案 2 :(得分:0)
不,您无法将信息保存到imageView实例中。即使你找到了imageView的可写字符串属性,这也是一种错误的方法。这样做:为imegeview.tag属性分配一个订单号,并为信息保留一个NSMutableDictionary,因此,您将使用imageView.tag作为键,信息将是值。
答案 3 :(得分:0)
如果您希望在UIImageView(或任何UIView)中存储字符串,请尝试以下操作 -
在视图中设置辅助功能标识符“l”
{
l.accessibilityIdentifier = @"your string here";
}
从你的手势识别器中获取UIView,“l”:
-(void)deleteImage:(UILongPressGestureRecognizer*)sender {
if(UIGestureRecognizerStateBegan == sender.state) {
UIView *view = sender.view;
NSString *storedString = view.accessibilityIdentifier;
}
}
storedString是存储在UIView中的字符串。希望这有助于未来的任何人!