gpt4 book ai didi

ios - 如何检查 UIView 是否仍然存在?

转载 作者:行者123 更新时间:2023-11-29 04:34:44 25 4
gpt4 key购买 nike

我必须根据设备方向为 UIView 设置一些自定义尺寸参数。我加载没有自己的 View Controller 的 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];

如果不再需要,我将其从 super View 中删除

[self.socialActionView removeFromSuperview];
NSLog(@"%@",self.socialActionView.superview);

删除后日志显示(null)

我喜欢这样的尺寸调整

- (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)];
}
}
}

到目前为止工作正常,直到我不从主视图中删除 subview (socialAcitonView)。因为此后 self.socialActionView 不再可访问。我在 stackoverflow 上看到过很多例子,比如

-(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]];
}
}

但它们都不起作用。调试器总是抛出错误访问导致的异常。 (从我的角度来看)意味着该对象不再存在。但是在我将其从 super View 中删除并说(null)之后,记录器如何访问它?

我知道最好为 View 提供一个专用的 View Controller 并将 didRotateFromInterfaceOrientation 放在那里,这样我就不必检查 SocialActionView 是否在那里。无论如何,我想问是否有一种方法可以检查 UIView 是否为(null)。在我将所有代码更改为 View / View Controller 对之前。

任何提示表示赞赏!

最佳答案

您将使其成为保留属性,然后在执行此操作时绕过保留属性:

socialActionView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];

如果您设置 self.socialActionView = ...,即使 View 从 subview 数组中删除,您的属性也应该保留其引用。

(事实上,我建议将您的综合语句更改为 @synthesize SocialActionView = _socialActionView; 并在编译器提示该符号的地方放置一个 self.socialActionView 。 )

关于ios - 如何检查 UIView 是否仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216215/

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