2012-04-04 119 views
0

我正在开发一个类似于照片库的应用程序,并且正在实施让用户从其图库中删除照片的选项。为了做到这一点,我决定在每张照片上放置一个隐形按钮。当用户点击“编辑”按钮时,每个图片上的隐藏删除按钮变为活动状态。为了简单起见,我在每个隐藏按钮上使用了相同的IBOutlet,并且我在Interface Builder中适当地标记了每个按钮。当用户点击图片上的按钮时,会出现一个警告视图,询问他们是否真的要删除它。如果他们点击是,我调用removeObjectAtIndex。这里是我使用的代码:从UI中删除图像

- (IBAction)deleteButtonPressed:(id)sender { 
    NSLog(@"Sender is %@", sender); 
    UIAlertView *deleteAlertView = [[UIAlertView alloc] initWithTitle:@"Delete" 
                   message:@"Are you sure you want to delete this photo?" 
                  delegate:self 
                cancelButtonTitle:@"No" 
                otherButtonTitles:@"Yes", nil]; 
    [deleteAlertView show]; 
    int imageIndex = ((UIButton *)sender).tag; 
    deleteAlertView.tag = imageIndex; 

} 

- (void)alertView: (UIAlertView *) alertView 
clickedButtonAtIndex: (NSInteger) buttonIndex 
{ 


    if (buttonIndex != [alertView cancelButtonIndex]) { 
     NSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]); 

     [self.array removeObjectAtIndex: alertView.tag]; 
     NSLog(@"After deleting item, array count = %d", [array count]); 
     alertView.tag.image = nil; 
    } 

    [self.user setObject:self.array forKey:@"images"]; 
} 

这里的问题是alertView.tag.image。我有一个错误,指出“成员引用基类型NSInteger(aka int)不是一个结构或联合。这段代码删除阵列中的图像很好,但我仍然需要从UI中删除图像。 alertView.tag.image就可以做到这一点,我不知道如何做到这一点,我对Objective-C仍然很陌生,我读的这本书根本没有涉及到这一点,我也想知道如何刷新UI ?删除图像后

回答

1

标签就是NSInteger。它没有名为image的属性。你应该使用,

((UIImageView *)[self.view viewWithTag:alertView.tag]).image =nil; 
+0

非常感谢您的回答,尽管当我添加代码时Xcode声明在'UIView *'类型的对象上找不到'Property'image。 – John 2012-04-04 16:01:47

+1

将它转换为(UIImageView *)。让我编辑它 – Vignesh 2012-04-04 16:03:58

+0

真棒,谢谢你的帮助! – John 2012-04-04 16:09:30

1

你试图访问不存在的属性:

alertView.tag.image = nil;

alertViewUIAlertView - 和T他tag是一个整数属性,它表示您已分配给视图的整型值(假设您已这样做)。 tag只是一个普通的旧int - 这是一个原始的。

你需要做的是拿着标签值,并在保存图片的超级视图上调用viewWithTag:这会给你一个图像视图的引用,然后你可以根据需要removeFromSuperview

+0

很酷谢谢你。这看起来像'[alertView.tag removeFromSuperview];'?对于新手的问题抱歉。 – John 2012-04-04 16:03:59

+0

否 - 它会是'[[self.view viewWithTag:alertView.tag] removeFromSuperview]',*假设*您的图像被添加到'self.view'。但是听起来也许你可以从更详细地查看Apple的一些文档中受益,特别是在视图层次结构如何工作的情况下。他们有一些很棒的示例代码,值得一试。 – lxt 2012-04-04 16:06:07

0

你如何将图像添加到用户界面?将UIImageView中的图像设置为其他图像或从视图中将其删除。

您不能在.tag之后添加.image。标记是一个整数实例字段,用于表示来自另一个视图的一个视图(等等)。标记本身,没有任何属性,除了它的值。