我必须根据设备方向将一些自定义大小参数设置为UIView。我加载的具有不是自己的ViewController如下所述的UIView:如何检查UIView是否仍然存在?
在main.h
@property (nonatomic, retain) IBOutlet UIView *socialActionView;
在main.m文件
@synthesize socialActionView;
。 。 。
socialActionView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:socialActionView];
,如果没有必要了我取出后从上海华与
[self.socialActionView removeFromSuperview];
NSLog(@"%@",self.socialActionView.superview);
日志说(空)删除
大小的调整我喜欢这个
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if ((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown)){
if (self.socialActionView != NULL) {
[self.socialActionView setBounds:CGRectMake(0, 0, 320, 480)];
[self.socialActionView setCenter:CGPointMake(160, 240)];
[self.scroll1 setContentSize:CGSizeMake(320, 600)];
[self.scroll1 setBounds:CGRectMake(0, 0, 320, 428)];
[self.scroll1 setCenter:CGPointMake(160, 266)];
}
} else if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight)){
if (self.socialActionView != NULL) {
[self.socialActionView setBounds:CGRectMake(0, 0, 480, 320)];
[self.socialActionView setCenter:CGPointMake(240, 160)];
[self.scroll1 setContentSize:CGSizeMake(480, 600)];
[self.scroll1 setBounds:CGRectMake(0, 0, 480, 268)];
[self.scroll1 setCenter:CGPointMake(240, 186)];
}
}
}
目前为止工作正常,直到我不从我的主视图中删除子视图(socialAcitonView)。在此之后,self.socialActionView不再可访问。从来就在这里看到了很多的例子在计算器一样
-(IBAction)showPopup:(id)sender {
if(![[self myView] isDescendantOfView:[self view]]) {
[self.view addSubview:[self myView]];
} else {
[[self myView] removeFromSuperview];
}
或
-(IBAction)showPopup:(id)sender
{
if (!myView.superview)
[self.view addSubview:myView];
else
[myView removeFromSuperview];
}
或
if (!([rootView subviews] containsObject:[self popoverView])) {
[rootView addSubview:[self popoverView]];
} else {
[[self popoverView] removeFromSuperview];
}
或
-(IBAction)showPopup:(id)sender {
if([[self myView] superview] == self.view) {
[[self myView] removeFromSuperview];
} else {
[self.view addSubview:[self myView]];
}
}
但他们没有工作。调试器总是抛出异常导致访问不良。 (从我的角度来看)意味着物体不再存在。但是如果记录器从超级视图中删除它并说(空),它如何访问它?
我知道给视图一个专用的视图控制器并把didRotateFromInterfaceOrientation放在那里会更好,所以我不必检查socialActionView是否存在。无论如何,我想问是否有办法如何我可以检查的UIView是(空)也没有。在我将所有代码更改为view/viewcontroller之前。
任何提示赞赏!
真棒!那是对的!非常感谢!只是为了了解:我在那里做了什么?发起了一个socialActionView的本地实例?这是可能的,而不是在我定义它的区块中投射它? – rockstarberlin
当你使用'self.'时,你实际上正在经历'@ synthesize'创建的不可见方法,而不仅仅是更新一个实例变量。这些方法根据您在'@ property'语句中放置的属性来运行。因此,在这种情况下,通过这些方法来尊重你的“保留”;直接进入变量不。 –