ものすごい勘違いをしていてハマった。記録に残しておく。
TableViewController.m
TableViewController.h
TableViewController.xib
を用意しておき、他のコントローラからこのコントローラを呼び出す。この時 -init を使う。
TableViewController *tableViewController =
[[TableViewController alloc] init];
[self.navigationController pushViewController:tableViewController animated:YES];
[tableViewController release];-initはこんな実装。
- (id)init
{
if (self = [super initWithStyle:UITableViewStylePlain]) {
:
:
}
return self;
}この場合、TableViewController.xib は使われない。なぜなら initWithStyle: を呼んだ場合、UITableViewController が UITableView を自動的に生成するから。普通に考えればわざわざ UITableViewStyle を引数に取っているので自明ではある..。
ずっと xib が使われているものだと思ってそのままにしていた。今回たまたま検索窓をつけようとしてこのことに気がついた。最初はなぜ xibの変更が反映されないのか焦ってしまった。
解決策は UIViewController の initWithNibName:bundle: を使うこと。
- (id)init
{
if (self = [super initWithNibName:@"TableViewController" bundle:nil]) {
:
:
}
return self;
}もしくは呼び出し側で initの代わりに使う。Xcodeが生成するテンプレートはこちらのスタイルになっている。
TableViewController *tableViewController =
[[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];
[self.navigationController pushViewController:tableViewController animated:YES];
[tableViewController release];



Responses
Leave a Response