iphone - 在 UIView 中存储额外的关联信息

标签 iphone objective-c ios xcode

我已经阅读了很多有关 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/

相关文章:

iphone - 我应该什么时候 promise ?

ios - TableView 单元格没有推送到下一个 View Controller

iphone - @synthesize 到底是做什么的?

iPhone静态库: How to hide instance variable

ios - 我的应用程序通过 Apple 批准后,我可以设置特定的 “Release Date” 吗?

iphone - 由于获取的结果 Controller 更新,释放的 View Controller 导致 EXC_BAD_ACCESS

iphone - 您将如何实现一个检测水平滑动以允许分页的 UITableView?

iphone - sqlite 准备语句错误-没有这样的表

ios - 如何在不同的方向上改变 View

ios - 有什么方法可以检查 iCloud Drive 是否打开?