我有一个activityIndicator及其后面的透明黑色层。当加载一些东西时,我会像这样显示它们:
[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中的此文件中,我正在创建视图。
但这似乎也不起作用。
最佳答案
请参阅XJones的评论。这个答案可能是错误的。
编辑问题后:
看来,因为您使用的是arc,所以您的loadingPlate
视图可能被释放得太早了。
分配并初始化loadingPlate
视图时,它的保留计数为+1,正如alloc / init所期望的那样。但是,由于使用的是ARC,因此在将其添加为主视图的子视图之后,ARC会释放它。实际上,loadingPlate
视图由其超级视图拥有,并且当您从超级视图中删除它时,超级视图会释放它,从而导致视图被释放。因此,当您尝试再次显示它时,它不再存在并且无法显示。
解决方案是为您的loadingPlate
视图创建一个属性,并为其提供一个“强”引用(实际上与将该属性声明为“保留”相同)。这样,具有此属性的对象将拥有loadingPlate
视图,并对其进行强有力的引用。
关于ios - iOS:隐藏后无法显示 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8383584/