gpt4 book ai didi

iOS:隐藏后无法显示 View

转载 作者:行者123 更新时间:2023-11-28 18:26:21 24 4
gpt4 key购买 nike

我有一个 activityIndi​​cator 和它后面的透明黑色层。当加载某些内容时,我会像这样显示它们:

[activityIndicator startAnimating];
loadingCover.hidden = NO;

当我隐藏它们时,我只是这样做:

[activityIndicator stopAnimating]; //hides on stop
loadingCover.hidden = YES;

到目前为止一切正常。但是不知何故,如果我想再次向他们展示,那是行不通的。有什么想法吗?

编辑:我就是这样做的...

- (void)viewDidLoad {
[mainView addSubview:loadingCover]; //works
}

- (void)parserDidEndDocument:(NSXMLParser *)parser {
[loadingCover removeFromSuperview]; //works
}

- (void)refreshRSS:(id)sender {
[mainView addSubview:loadingCover]; //doesn't work
}

编辑2:首先,我正在使用 ARC 模式进行编码,其次,loadingCover 已更改为 loadingplate,没什么大不了的......

好的,所以在我的 .h 文件中我这样做:

UIView *loadingplate;
UIActivityIndicatorView *loadingIndicator;

在 viewDidLoad 的 .m 文件中,我这样做:

CGRect viewRect = CGRectMake(0, 0, 320, 460);
loadingplate = [[UIView alloc] initWithFrame:viewRect];

UIColor *loadingplateColor = [[UIColor alloc] initWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
[loadingplate setBackgroundColor:loadingplateColor];
loadingplate.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin;

loadingIndicator = [[UIActivityIndicatorView alloc] initWithFrame:viewRect];
[loadingIndicator setContentMode:UIViewContentModeCenter];
[loadingIndicator startAnimating];

loadingIndicator.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleBottomMargin;

[loadingplate addSubview:loadingIndicator];
[mainView addSubview:loadingplate];

EDI3:阅读 Jasarien 的回答后,我在我的 .h 文件中尝试了这个:

@property (strong, nonatomic) UIView *loadingPlate;

然后在我的 .m 文件中:

@synthesize loadingPlate = _loadingPlate;

在 viewDidLoad 的这个文件中,我正在创建 View 。

但这似乎也行不通。

最佳答案

请参阅 XJones 的评论。这个答案可能是错误的。

问题编辑后:

似乎由于您使用的是 arc,您的 loadingPlate View 可能发布得太早了。

当您分配并初始化您的 loadingPlate View 时,它将具有 +1 的保留计数,正如 alloc/init 所预期的那样。但是,因为您使用的是 ARC,所以在将其添加为主视图的 subview 后,ARC 会释放它。实际上,loadingPlate View 由其 super View 拥有,当您将其从 super View 中删除时, super View 会释放它,从而导致 View 被释放。因此,当您再次尝试显示它时,它已不存在并且无法显示。

对此的解决方案是为您的 loadingPlate View 创建一个属性,并为其提供“强”引用(实际上与将属性声明为“保留”相同)。这样,具有此属性的对象将拥有 loadingPlate View ,并保持对其的强引用。

关于iOS:隐藏后无法显示 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8383584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com