2012-07-03 5 views
0

몇 시간을 보냈습니다. I는 상세도 여기에 개시되어 제어부 (jQuery과)가 다음 상세보기 제어기보기 컨트롤러의 두 번째 시작 후 Superview는 Nil입니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    EventLocationDetailController *newDetailViewController = [[EventLocationDetailController alloc] initWithNibName:@"EventLocationDetailController" bundle:nil]; 
    self.eventDetailController = newDetailViewController; 
    [self.navigationController pushViewController:self.eventDetailController animated:YES]; 

    [newDetailViewController release]; 

} 

를 표시하는 다음 메소드를 호출 버튼 방식이 존재 슬라이드에서 슬라이드 아웃 애니메이션 사용자 확인 선택 : 애니메이션 완료되었음을 나타냅니다 ConfirmActionViewController에 의해 호출

-(void)confirmLastActionWithMessage:(NSString *)message { 

ConfirmActionViewController *newConfirmActionViewController = [[ConfirmActionViewController alloc] initWithNibName:@"ConfirmActionViewController" bundle:nil]; 
self.confirmActionViewController = newConfirmActionViewController; 
[newConfirmActionViewController release]; 

[[self.view superview] addSubview:self.confirmActionViewController.view]; 

}

프로토콜 방법.

-(void)didFinishConfirmDisplay:(UIView *)viewToRemoveFromSuperview { 

    [viewToRemoveFromSuperview removeFromSuperview]; 
} 

처음 버튼을 누르면 완벽하게 작동합니다. 세부 컨트롤러를 띄운 다음 스택에 다시 밀어 넣고 버튼을 다시 누르면 아무 것도 일어나지 않고 세부 컨트롤러의 수퍼 뷰는 그 후에 메서드를 호출 할 때마다 nil입니다. Superview는 details 뷰에 대한 viewWillAppear 메소드에서 nil이 아니며 confirmLastActionWithMessage 메소드로 가져올 때만 적용됩니다. 그 사이에는 다른 사용자 상호 작용이 발생하지 않습니다. 수퍼 뷰를 다시 얻으려면 어떻게해야합니까? 애니메이션없이 작동하는 유사한 코드가 있습니다.

또한 디테일 뷰 컨트롤러가 스택에서 튀어 나올 때 dealloc을 호출하지 않는다는 것을 알았습니다. 문제가있는 곳을 잘 모릅니다.

감사합니다.

편집 1

확인. addSubview 행을 다음과 같이 바꿨습니다.

[self.view insertSubview : self.confirmActionViewController.view atIndex : 0];

애니메이션보기는 표 셀 중 하나 아래에 나타납니다. 테이블 셀 중 하나가 수퍼 뷰를 훔칠 수 있습니까?

+0

속성은 무엇입니까? 특히, 특성에 사용자 정의 논리를 추가 했습니까? – mydogisbox

+0

@property (비 원자력, 보유) ConfirmActionViewController * confirmActionViewController; –

+0

선언이 아닌 구현입니다. '@ synthesize' 또는 다른 것을 가지고 있습니까? – mydogisbox

답변

0

글쎄, 왜 슈퍼 뷰에 서브 뷰를 추가해야하는지 잘 모르겠다. 왜 그냥 아무 수퍼가없는 이유를 설명 할 수 없습니다

self.view하지만 하나가 self.view 또는

[[[[UIApplication sharedApplication] delegate] window] addSubview:yourview]; 

이가보기를 렌더링 컨트롤러보기를 추가하는 시도를 추가하지 모든 것의 꼭대기.

+0

나는 이것을 시도했지만, 뷰 하단의 툴바 때문에 애니메이션의 시작점을 조정해야했다. 애니메이션은 도구 막대가 있거나없는 다른보기에 나타납니다. 나는 코드가 이식 가능하고 애니메이션의 사용이 시작될 때 화면 하단이 어디인지 계산하지 않고도 시작할 수 있기를 바랬다. 다른 대답을 얻지 못하면 그 방법이 유일한 옵션 일 수 있습니다. 감사. –

+0

툴바, 탐색 바 등이없는 툴바와 같이 애니메이션의 시작점을 계산해야하는 경우가있는 새 enum을 만듭니다.해당 열거 형의 추가 매개 변수를 취하고 스위치 블록 내에서 시작점을 계산하려면 메서드'- (void) confirmLastActionWithMessage : (NSString *) message'를 수정하십시오. 메서드를 호출 할 때 필요에 따라 인수를 전달합니다. 이렇게하면 코드를 더 이식성있게 렌더링 할 수 있습니다. – tGilani