【问题标题】:remove a programmatically added UIImageView删除以编程方式添加的 UIImageView
【发布时间】:2012-11-30 03:46:34
【问题描述】:

我正在制作一个在主视图中有 2 个按钮的程序;

一个叫show,一个叫hide,

当用户按下显示按钮时,一个图像视图被添加到屏幕

代码:

-(IBAction)show{
  UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 155, 155)];
  img.image = [UIImage imageNamed:@"icon.png"];
  [self.view addSubview:img];
}

当用户按下隐藏按钮时,我希望应用隐藏刚刚添加的图像 (img)

但是……

当我使用时

-(IBAction)add{
  [img removeFromSuperView];
}

Xcode 说“img Undecleared”

edit:有人说将对象定义为公共对象(@property),但问题是图像视图只添加了一次。但我希望它在每次用户按下显示按钮时添加新的图像视图,

所以我使用 [[self subviews]objectAtIndex:xx]removeFromSuperview] 方法来解决问题

【问题讨论】:

  • 这里你得到这个错误,因为你没有为整个类定义 img 这里你可以在 show 方法中访问这个变量,因为这个变量范围仅限于 show 方法

标签: iphone xcode uiimageview removeall


【解决方案1】:

为您的图像视图设置tag,然后您可以通过此标签获取它。

[img setTag:123];

...

[[self.view viewWithTag:123] removeFromSuperview];

【讨论】:

  • /Users/PoriaX/Desktop/toMake/Classes/toMakeViewController.m:16:0 /Users/PoriaX/Desktop/toMake/Classes/toMakeViewController.m:16:警告:“UIView”可能不会响应“-removeFromSuperView”
  • @user1846654 哦,是removeFromSuperview,不是removeFromSuperView
  • 仅供参考 - Xcode 12,在 2021 年 - 当 HIDDEN 切换到 YES 神奇地停止工作时,此解决方案仍然有效(我有多个视图控制器 - 在 1 中工作,在 2 中不会)。再次感谢@Kjuly
【解决方案2】:

.h 文件中创建UIImageView 的对象,如下所示..

UIImageView *img;

并在.m 文件viewDidLoad: 方法中添加它,如下所示..

- (void)viewDidLoad
{
    ///your another code
    img = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 155, 155)];
    img.image = [UIImage imageNamed:@"icon.png"];
    img.hidden = YES;
    [self.view addSubview:img];
}

当按下显示按钮时显示图像

-(IBAction)show{
    img.hidden = NO;
    [self.view bringSubviewToFront:img];
}

为了隐藏,就像下面这样隐藏..

-(IBAction)add{
    img.hidden = YES;
}

【讨论】:

  • Paras 绝对有正确的方法。您可以将UIImageView *img 放在{ } 中,如下所示:@interface ClassName { UIImageView *img; } 或类似@property (strong, nonatomic) UIImageView *img; 的属性,并使用self.img 引用img
  • @KKendall 是的,伙计,你也是对的,但我使用简单的流程,因为用户只想通过点击按钮隐藏和显示图像,否则你的逻辑也是正确的伙计......谢谢...... :)
  • 啊,我明白了。我只是不明白两者之间的区别,实际上我只是在 SO 上问了一个问题。
【解决方案3】:

您的 img 对象仅在 show 方法中可见,而不在外部可见..这就是原因。在外面声明,你的问题就解决了。

【讨论】:

  • 不要将其设置为 @property 或 #import 语句下方的全局变量。
【解决方案4】:

让这个 UIImageView 成为你的 UIViewController 类的成员

【讨论】:

  • 有关于这个主题的教程吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2011-08-02
相关资源
最近更新 更多