iOS で tableView の上にビューを表示する際に問題が発生しています。私たちのアプローチは、UIViewController のサブクラスのサブビューである UIView を作成し、それを背面に送信してから、didSelectRowAtIndexPath で前面に移動することです。XIB を使用してユーザー インターフェイスを作成しています。ビュー階層は次のようになります。
View
-- UIView ("loading..." ビュー)
-- -- UILabel ("loading...")
-- -- UIActivityIndicatorView
-- UITableView
-- UILabel
「読み込み中」ビューを表示するために行っていることは次のとおりです。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Create a request to the server based on the user's selection in the table view
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSError *err;
// Show the "loading..." message in front of all the other views.
[self.view bringViewToFront:self.loadingView];
[self.loadingWheel startAnimating];
// Make the request
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&err];
// Stop animating the activity indicator.
[loadingWheel stopAnimating];
// other stuff...
}
XIB 内の他のすべてのビューの前に「読み込み中」のビューを残すと、それが希望どおりに見えることがわかります。ただし、読み込み中のビューを (上記のビュー階層に従って) 背面に残してから前面に移動しようとすると、ビューは表示されません。印刷するself.view.subviews
と、読み込みビューが実際にビュー階層にあることがわかります。興味深いことに、didSelectRowAtIndexPath 内のビューで何かを変更しようとすると (たとえば、ビューに既に表示されているラベルの背景色を変更するなど)、変更はシミュレーターに表示されません。