XCode 4.2を使用しており、ストーリーボードを使用してUIを構築しました。 UITableViewの上下にコンテンツを持つビューを作成する必要があり、UIViewControllerを使用してこれを実現できます。 UITableViewControllerでは、テーブルの上または下にコンテンツを追加できません。テーブルのヘッダー/フッターを使用できますが、それは私が達成したいものには機能しません。
UITableViewが埋め込まれたUIViewControllerができました。 UITableViewの高さと幅を適宜調整して、探しているUIレイアウトを提供できます。
UITableViewの静的セルをカスタマイズできますが、ビルドしようとすると次のエラーが表示されます。
無効な構成:静的テーブルビューは、UITableViewControllerインスタンスに埋め込まれている場合にのみ有効です
私の質問は、他の人がどのようにこれを回避しているのですか?静的セルを使用してテーブルビューを作成し、視覚的にレイアウトすることは非常に素晴らしいことですが、どうやら理解できない何らかの理由で許可されていないようです。視覚的なレイアウト要件のため、UITableViewControllerに切り替えることができません。
どんな援助も大歓迎です。
あなたが正しいです。ストーリーボードでは、viewControllerに埋め込まれた静的セルを持つtableViewを使用できません。それを回避する方法の1つ(ただし、自分で試していないため、動作するかどうかはわかりません)は、静的セルを使用してストーリーボードでUITableViewControllerのインスタンスを作成することです。 UIViewのインスタンスをviewControllerに追加し、UITableViewControllerのtableViewをプログラムでviewControllerのUIViewにロードします。
Xcode 4.5以降のバージョンでこれを実現するには、アプリがiOS 6以降をターゲットにしていると仮定します。
ストーリーボードで、メインビュー内にビューコンテナーを含むUIViewControllerを作成するだけです。次に、そのビューコンテナを、静的セルを含むUITableViewControllerに接続します。
ちょうどこのような:
1行のコードは必要ありません。クリック、ドラッグ、埋め込みを選択するだけです。 View Controllerの封じ込めは自動的に処理されます。
pmdの答えは機能しますが、iOS 5との後方互換性も必要な場合は、View Containment APIを使用してプログラムで埋め込むことができます。
親UIViewControllerのviewDidLoadメソッドで:
- (void)viewDidLoad
{
[super viewDidLoad];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
MyTableViewController* vc =[storyboard instantiateViewControllerWithIdentifier:@"MyTableVC"];
[self addChildViewController:vc];
[self.view addSubview:vc.view];
// ensure embedded view is aligned to top
CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
vc.view.frame = frame;
[vc didMoveToParentViewController:self];
}
静的セルを使用してUITableViewControllerのストーリーボードIDを指定することを忘れないでください。
私はこれが古い質問であることを知っていますが、私はこの問題に対する解決策があります。
UIViewControllerに3つの静的セルが必要だったので、これが私がしたことです。
以下の機能を実装します。 buttonDownは、ボタンの「タッチダウン」イベントに接続されています。 buttonUpは「Touch Up Inside」に接続されています[〜#〜] and [〜#〜] 'Touch Up Outside'
-(IBAction)buttonDown:(id)sender {
if ([sender tag] == 1) {
myFirstCell.selected = YES;
}
else if ([sender tag] == 2) {
mySecondCell.selected = YES;
}
else if ([sender tag] == 3) {
myThirdCell.selected = YES;
}
}
-(IBAction)buttonUp:(id)sender {
myFirstCell.selected = NO;
mySecondCell.selected = NO;
myThirdCell.selected = NO;
}
ButtonDownイベントで好きなことを行い、ボタンを使用して新しいビューに直接移動できます。これは非常に便利です。