我必須根據設備方向將一些自定義大小參數設置爲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'語句中放置的屬性來運行。因此,在這種情況下,通過這些方法來尊重你的「保留」;直接進入變量不。 –