【问题标题】:Deleting an image from the UI从 UI 中删除图像
【发布时间】:2012-04-04 15:54:44
【问题描述】:

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

- (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(又名 int)不是结构或联合。这段代码可以很好地从数组中删除图像,但我仍然需要从 UI 中删除图像。我想alertView.tag.image 可以做到这一点。我不知道该怎么做,我还是 Objective-C 的新手,而且我读的书根本没有涵盖任何内容。我也想知道如何刷新删除图片后的UI?

【问题讨论】:

    标签: objective-c ios xcode image


    【解决方案1】:

    标签只是 NSInteger。它没有称为图像的属性。你应该使用,

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

    【讨论】:

    • 非常感谢您的回答,尽管当我添加该代码时,Xcode 指出“在 UIView * 类型的对象上找不到属性 image
    【解决方案2】:

    您正在尝试访问不存在的属性:

    alertView.tag.image = nil;

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

    您需要做的是获取标签值并在保存图像的超级视图上调用viewWithTag:这将为您提供对图像视图的引用,然后您可以根据需要removeFromSuperview

    【讨论】:

    • 很酷,谢谢。这看起来像[alertView.tag removeFromSuperview]; 吗?对不起,新手问题。
    • 不 - 应该是 [[self.view viewWithTag:alertView.tag] removeFromSuperview]假设您的图像已添加到 self.view。但听起来也许您可以从更详细地查看 Apple 的一些文档中受益,特别是关于视图层次结构的工作原理。他们有一些很棒的示例代码,非常值得一试。
    【解决方案3】:

    如何将图像添加到 UI?将 UIImageView 中的图像设置为另一个图像或将其从视图中删除。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 2010-12-31
      • 2011-05-26
      • 2017-01-26
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多