몇 시간을 보냈습니다. 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];
애니메이션보기는 표 셀 중 하나 아래에 나타납니다. 테이블 셀 중 하나가 수퍼 뷰를 훔칠 수 있습니까?
속성은 무엇입니까? 특히, 특성에 사용자 정의 논리를 추가 했습니까? – mydogisbox
@property (비 원자력, 보유) ConfirmActionViewController * confirmActionViewController; –
선언이 아닌 구현입니다. '@ synthesize' 또는 다른 것을 가지고 있습니까? – mydogisbox