1

iOS アプリケーションに問題があり、現在取り組んでいます:

現時点での私の主な目標は、のがクリックされたときに、UITableView overlayの上に小さい を表示することです。これは、ChildViewControllers の概念を試す良い機会になると思いました。だから私はこの概念を使用しようとしましたが、結果は満足のいくものではありません. 何もないようです。が発生しますが、コードが実行され (コンソールで確認できます)、 を設定すると、色付きの四角が表示されますが、他には何も表示されません...UITableView mainUIButtonUITableViewCellmainbackgroundColor

私の実装に何が問題なのかわかりません。何か不足していることを教えていただければ幸いです。

私の目標を達成するためのより良い方法はありますか?

- (void) buttonInCellOfMainTableViewPressed:(UIButton*) cartButton {
    NSLog(@"ButtonClicked");
    UIView * containerView = [[UIView alloc] initWithFrame:CGRectMake(30, 265, 255, 247)];
//    containerView.backgroundColor = [UIColor blueColor];
//self isn't a subclass of UITableViewController, because a ordinary 'root view' is needed... The main tableView is a subview of the root view..
    [self.view addSubview:containerView];
    [self.view bringSubviewToFront:containerView];

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
    OverlayController* overlayController = [mainStoryboard instantiateViewControllerWithIdentifier:@"OverlayController"];// is a subclass of UITableViewController

    /*configure the overlayController*/

    overlayController.view.frame = self.containerView.bounds;
    [self addChildViewController:overlayController];
    [self.containerView addSubview:overlayController.view];
    [overlayController didMoveToParentViewController:self];
}

編集:エラーを修正したので、コードは次のようになります。

- (void) buttonInCellOfMainTableViewPressed:(UIButton*) cartButton {
    NSLog(@"ButtonClicked");
    self.containerView = [[UIView alloc] initWithFrame:CGRectMake(30, 265, 255, 247)]; 
//    containerView.backgroundColor = [UIColor blueColor];
    [self.view addSubview:self.containerView];
//self isn't a subclass of UITableViewController, because a ordinary 'root view' is needed... The main tableView is a subview of the root view..
    [self.view bringSubviewToFront:self.containerView];

    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle: nil];
    OverlayController* overlayController = [mainStoryboard instantiateViewControllerWithIdentifier:@"OverlayController"];// is a subclass of UITableViewController

    /*configure the overlayController*/

    overlayController.view.frame = self.containerView.bounds;
    [self addChildViewController:overlayController];
    [self.containerView addSubview:overlayController.view];
    [overlayController didMoveToParentViewController:self];
}

この変更により、overlayControllerは表示されますが、非常に奇妙に見えます。 の表の一部のセルはoverlayController、指定されたサイズ (78 ポイントではなく 44 ポイント) を持たず、奇妙に重なっています。何が間違っている可能性がありますか?

アプリからのスクリーンショット

プロトタイプのセルがどのように見えるかを確認できるように、ストーリーボードのスクリーンショット...

4

2 に答える 2

0

あなたが達成しようとしていることを正確に説明できますか?

おそらくContainerViewを使用しようとします。

Appleによると、「コンテナビューは、子ビューコントローラを含めることができるビューコントローラのビューサブグラフ内の領域を定義します。ストーリーボードのコンテナビューから子ビューコントローラへの埋め込みセグエを作成します」

以前はこのアプローチを使用して、同じビューに2つのテーブルビューを表示していました.1つは画面の上部に、もう1つは下部にありました。

あなたが何か違うことを達成しようとしているかどうかはわかりません。しかし、コンテナビューのアプローチを確認します。

于 2014-05-22T20:57:55.533 に答える
0

問題は、self.containerView が nil であるため、その境界が CGRectZero になることだと思います。メソッドの 2 行目を次のように変更する必要があります。

self.containerView = [[UIView alloc] initWithFrame:CGRectMake(30, 265, 255, 247)];
于 2014-05-22T21:01:37.923 に答える