【发布时间】:2012-07-20 15:08:39
【问题描述】:
我在 SO 上阅读了很多关于 Gesture Recognizers 的文章 - 并设法编写了一个工作代码,当在 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];
}
}
因此,在这种情况下,向 Selector deleteImage: 发送信息有点棘手。
我想在调用 deleteImage 时向服务器发送 HTTP 请求,所以我需要一些来自视图的信息。
是否可以将信息存储到UIImageView 并从sender.view.myinfo 中检索(例如)?
【问题讨论】:
-
也许你可以使用 imageView.tag 来存储一些带有数字的信息。
-
在 MVC 世界中,您通常不希望在视图中“存储信息”。如果你想跟踪这样的事情,你可能会在你的控制器中跟踪它,或者更好的是,你的控制器使用的模型。因此,也许您有一些
NSMutableArray来跟踪已删除的项目,并且在您删除时,从视图中删除图像(或者如果您不想删除它,则可能会使其变暗,直到您从服务器获得确认)然后让您的控制器在您用来跟踪这些内容的数组中添加已删除的项目。或类似的东西。 -
虽然您确实不应该在视图中存储数据,但正如@nielsbot 所描述的那样,将指向数据的指针挂在它们上是很自然的。在这种情况下使用 objc_setAssociatedObject 不会违反 MVC,只要关联对象真的只是指向“关联对象”(它是模型的一部分)的指针。
-
@RobNapier 同意。当我看到人们滥用这一点时,它只会让我不寒而栗,在他们的视图中存储各种模型数据,而忽略了各种可能的风险。
标签: iphone objective-c ios xcode