我有一个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中的此文件中,我正在创建视图。

但这似乎也不起作用。

最佳答案

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

编辑问题后:

看来,因为您使用的是arc,所以您的loadingPlate视图可能被释放得太早了。

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

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

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

10-14 22:31