これは私が持っているものです。私の問題は、後者のスクロールビューのサイズを変更するために、テーブルビューコントローラーから UserProfileViewController にテーブルビューのフレームの高さを有用な時間に戻すことです。また、どういうわけかこれを逆方向に行っていると感じているので、どんな提案も大歓迎です。
このビューには、上部と下部の 2 つの部分があります。親ビューはスクロール ビューです。これで達成したかったのは、下部に表示される内容を制御する一種のタブバーを上部に配置することです。
左上のボタンを押して別のビューを表示すると、上部にフリップ アニメーションが表示されます。これを実現する方法は、ダミー ビューと背面ビューの 2 つのビューを使用することです。ダミー ビューには、子としての正面図があります。フロント ビューは、すべてのボタンを含むビューです。このアニメーションのコードは、次のようにして実現されます。
- (IBAction)infoButtonPressed:(id)sender
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.hoverView cache:YES];
if ([self.headerView superview]) {
[self.headerView removeFromSuperview];
[self.hoverView addSubview:self.backOfHeaderView];
[self.infoButton removeFromSuperview];
[self.backOfHeaderView addSubview:self.infoButton];
} else {
[self.backOfHeaderView removeFromSuperview];
[self.hoverView addSubview:self.headerView];
[self.infoButton removeFromSuperview];
[self.headerView addSubview:self.infoButton];
}
[UIView commitAnimations];
}
下部は、プレース ホルダーとして機能するコンテナー ビューから作成されます。ボタンを押すと、別のビュー コントローラーがコンテナー ビューに表示されます。
各ビュー コントローラーには、独自のコンテナー ビューがあります。コントローラーが読み込まれると、そのビュー コントローラー (テーブルビュー) の特定のビューがコンテナー ビューに追加されます。また、テーブルビューがコンテナー ビューに既に追加されている場合は、それが削除されることも確認します。これはすべて、特定のビュー コントローラーごとに行われます。
ユーザー プロファイル ビューのビュー コントローラーには、コンテナー ビューのインスタンスと、プレースホルダーとしても機能する UIViewController の 1 つがあります (以降は currentViewController という名前になります)。特定のボタンが押されると、表示したいView Controllerのインスタンスがすでに存在するかどうかがチェックされます。そうでない場合は、それを作成し、そのテーブルビューのフレームをコンテナー ビューの境界に設定します。その後、スーパービューから currentViewController のビューを削除し、親ビューコントローラーから currentViewController 自体を削除して、これらに何かが割り当てられている場合、それらが存在しないことを確認します。次に、目的のビューコントローラーを currentViewController に割り当てます。また、目的のビューコントローラーを割り当てます。親ビューコントローラ(ユーザープロファイルビューコントローラ)のコンテナビューへのcontainerViewインスタンス。最後に、目的のビュー コントローラーを子としてメイン ビュー コントローラー (ユーザー プロファイル ビュー コントローラー) に追加し、目的のビュー コントローラーのビューをメイン ビュー コントローラーの containerView に追加します。これは、ボタンの 1 つのコードです。
//Check if there is an instance of the viewcontroller we want to display. If not make one and set it's tableview frame to the container's view bounds
if(!_userWallViewController) {
self.userWallViewController = [[WallViewController alloc] init];
// self.userWallViewController.activityFeedTableView.frame = self.containerView.bounds;
}
[self.userWallViewController.containerView addSubview:self.userWallViewController.activityFeedTableView];
//If the currentviewcontroller adn it's view are already added to the hierarchy remove them
[self.currentViewController.view removeFromSuperview];
[self.currentViewController removeFromParentViewController];
//Add the desired viewcontroller to the currentviewcontroller
self.currentViewController = self.userWallViewController;
//Pass the data needed for the desired viewcontroller to it's instances
self.userWallViewController.searchURLString = [NSString stringWithFormat:@"event/user/%@/", self.userID];
self.userWallViewController.sendCommentURLString = [NSString stringWithFormat:@"event/message/%@", self.userID];
self.userWallViewController.totalCellHeight = ^(float totalCellHeight){
self.userWallViewController.numberOfCells = ^(float numberOfCells){
NSLog(@"The total number of cells: %f", numberOfCells);
NSLog(@"The total cell height: %f", totalCellHeight);
self.scrollView.contentSize = CGSizeMake(320.0, totalCellHeight + 172.0 + 33.0);
CGRect newFrame = self.userWallViewController.containerView.frame;
newFrame.size.height = totalCellHeight + 33.0;
self.userWallViewController.containerView.frame = newFrame;
NSLog(@"Container view: %f", self.containerView.frame.size.height);
NSLog(@"Scroll view: %f",self.scrollView.contentSize.height );
};
};
//Add this containerview to the desired viewcontroller's containerView
self.userWallViewController.containerView = self.containerView;
//Add the needed viewcontroller and view to the parent viewcontroller and the containerview
[self addChildViewController:self.userWallViewController];
[self.containerView addSubview:self.userWallViewController.view];
[self performSelector:@selector(changeScrollView) withObject:self afterDelay:0.5];
//CLEAN UP THE CONTAINER VIEW BY REMOVING THE PREVIOUS ADDED TABLE VIEWS
[self.userFansViewController.userSimpleTableView removeFromSuperview];
[self.fanOfViewController.userSimpleTableView removeFromSuperview];
[self.userPublishedMovellaListViewController.gridView removeFromSuperview];
[self.userPublishedMovellaListViewController removeFromParentViewController];
self.userPublishedMovellaListViewController = nil;
}