1

我在 iOS 应用程序中遇到问题,我目前正在处理:

我目前的主要目标是在 a中的 a被点击时呈现一个较小UITableView overlay的。我认为这应该是尝试 ChildViewControllers 概念的好时机。所以我尝试使用这个概念,但结果并不令人满意。似乎什么都没有。发生了,但代码被执行(我可以在控制台中看到它),当我设置 a 时,我可以看到一个彩色方块,但没有别的......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没有指定的大小(44 点而不是 78 点)并且以奇怪的方式重叠。有什么问题?

来自应用程序的屏幕截图

故事板的屏幕截图,因此您可以看到原型单元格的样子......

4

2 回答 2

0

你能解释一下你到底想要完成什么吗?

我可能会尝试使用 ContainerView。

根据苹果的说法:“容器视图在视图控制器的视图子图中定义了一个区域,该区域可以包含一个子视图控制器。在故事板中创建从容器视图到子视图控制器的嵌入序列”

我以前使用这种方法在同一个视图中有两个表视图。一个在屏幕的顶部,另一个在底部。

我不知道你是否想完成一些不同的事情。但我会检查容器视图方法。

于 2014-05-22T20:57:55.533 回答
0

我认为问题在于 self.containerView 是 nil,所以它的边界是 CGRectZero。您需要将方法中的第二行更改为,

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