장치 방향에 따라 사용자 정의 크기 매개 변수를 UIView에 설정해야합니다. main.mUIView가 아직 있는지 확인하는 방법은 무엇입니까?
@synthesize socialActionView;
에
@property (nonatomic, retain) IBOutlet UIView *socialActionView;
main.h에 : 나는 다음과 아닌 자신의 ViewController으로이 에 UIView를로드합니다. . .
socialActionView = [[[NSBundle mainBundle] loadNibNamed:@"SocialActionViewController" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:socialActionView];
더 이상 필요 나는이
- (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)];
}
}
}
같이 할 크기 조정 제거 후 로그는 말한다
[self.socialActionView removeFromSuperview];
NSLog(@"%@",self.socialActionView.superview);
(널)과 수퍼에서 제거되지 않은 경우
는 지금까지 기본보기에서 하위보기 (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]];
}
}
같은 유래 여기에 예를 많이 볼 수 있지만, 그들 중 누구도 작동하지 않습니다 i've. 디버거는 항상 잘못된 액세스의 예외 원인을 throw합니다. 내 관점에서 볼 때 객체가 더 이상 존재하지 않는다는 것을 의미합니다. 하지만 로거가 superview에서 제거하고 (null)라고 말한 후 어떻게 로거에 액세스 할 수 있습니까?
전용보기 컨트롤러에 전용보기 컨트롤러를 지정하고 didRotateFromInterfaceOrientation을 넣어두면 좋을 것입니다. 따라서 socialActionView가 있는지 확인하지 않아도됩니다. 어쨌든 내가 UIView가 (null)인지 검사 할 수있는 방법이 있는지 묻고 싶습니다. 모든 코드를 뷰/뷰 컨트롤러 쌍으로 변경하기 전에.
감사합니다.
AWESOME! 그 말이 맞았 어! 고마워요! 단지 이해할 수 있습니다 : 내가 거기서 무엇을 했습니까? socialActionView의 로컬 인스턴스를 시작 했습니까? 내가 그것을 정의하는 블록에 캐스팅하지 않고 가능한가? – rockstarberlin
'self.'를 사용하면 실제로 인스턴스 변수를 업데이트하는 것보다'@ synthesize'가 만드는 보이지 않는 메소드를 사용하게됩니다. 이러한 메소드는'@ property' 문에 두는 속성에 따라 작동합니다. 그래서,이 경우, 방법을 통해가는 것은 당신의 '보유'를 존중합니다; 직접 변수로 이동하지 않습니다. –