テーブルビューがスクロールされたときにヘッダーが上部に固定されるように、UITableView のヘッダーを修正したいと考えています。
私はいくつかのグーグルを行いました.UINavigationControllerのサブクラスを使用し、UITableDataSourceおよびUITableViewDelegateプロトコルに従い、UINavigationControllerのビューでヘッダービューとtableViewを追加し、すべてのプロトコルメソッドを実装するのが最もクリーンな方法のようです.
基本的に、私はこのstackoverflowの質問に対して選択された回答とまったく同じようにやっています
didSelectRowAtIndexPath メソッドには次のものがあります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:nil bundle:nil] autorelease];
viewController2.title = @"test";
[self pushViewController:viewController2 animated:YES];
}
「self」の代わりに「self.navigationController」(これが UITableViewController の場合は通常そうであるように) の最後の行にある場合、何も起こりません (もちろん、self は UINavigationController であるため)。現在、viewController@のビューはプッシュされていませんが、「test」が表示されてナビゲーションバーが変更されたために何かが起こっていますが、固定ヘッダーと UITableView は残っています。さらに興味深いことに、テーブル ビューを初めてタップすると、ナビゲーション バーに [テスト] のみが表示され、[戻る] ボタンは表示されません。ナビゲーションバーに「戻る」ボタンを表示するには、もう一度行をタップする必要があります(最初にタップした後も UITableView が残っているため)...
要するに
1) テーブル ビューの行をタップしたときに、viewController2 のビューを表示するにはどうすればよいですか?
2) 最初のタップで「戻る」ボタンを表示するにはどうすればよいですか?
UINavigationController の私の init メソッドは次のとおりです。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[self.navigationController setNavigationBarHidden:NO];
UIView *mainView = [[[UIView alloc] initWithFrame:CGRectMake(0, statusBarHeight+navBarHeight, 320, 480-statusBarHeight-navBarHeight-tabBarHeight)] autorelease];
UIImage *stripedBackground = [UIImage imageNamed:@"bg.png"];
UIImageView *background = [[[UIImageView alloc] initWithImage:stripedBackground] autorelease];
background.frame = CGRectMake(0, 0, 320, mainView.frame.size.height);
[mainView addSubview:background];
UIImage *header = [UIImage imageNamed:@"header.png"];
UIImageView *headerView = [[[UIImageView alloc] initWithImage:header] autorelease];
headerView.frame = CGRectMake(0, 0, header.size.width, header.size.height);
[mainView addSubview:headerView];
UITableView *streamTableView = [[[UITableView alloc] initWithFrame:CGRectMake(0, header.size.height, 320, mainView.frame.size.height-header.size.height) style:UITableViewStylePlain] autorelease];
[streamTableView setDelegate:self];
[streamTableView setDataSource:self];
[mainView addSubview:streamTableView];
[header release];
[self.view addSubview:mainView];
}
return self;
}