-2

我正在使用以下代码UIView从 a实例化 a XIB,然后将其添加到选定UITableViewCell的显示中。当我运行代码并触摸单元格时,我可以浏览代码并看到所有内容都正确实例化(没有什么是 nil),但视图从未显示。

我有一个 UIView,上面有几个按钮。在 Interface Builder 中,我将 UIView 设置为使用 UIView 的子类,该子类目前没有任何代码,除了 Xcode 生成的样板。我希望有人能指出我在使用此代码使其正常工作时所犯的任何明显错误。

请注意,有一次我在 UITalbeViewCell 中显示了 UIView,但在一些重构过程中我搞砸了一些东西,最终重新编写了代码来处理这个问题。发生这种情况时,我无法再在单元格中显示 UIView。

@implementation HZRunwayViewController
{
    EKEvent *currentEvent;
    BOOL editingEvent;
    HZEventDrawerView *eventDrawer;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Check if we are touching an event
    if (indexPath.section == 0 && [self.eventsForCurrentDay count]) {

        // Grab the selected cell and make sure it's an event cell
        UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
        if ([cell isKindOfClass:[HZEventTableViewCell class]]) {

            // Setup our event cell and our action drawer for use.
            HZEventTableViewCell *eventCell = (HZEventTableViewCell *)cell;

            if (!eventDrawer) {
                eventDrawer = (HZEventDrawerView *)[[NSBundle mainBundle] loadNibNamed:@"HZEventDrawerView" owner:self options:nil][0];
            }

            eventDrawer.bounds = eventCell.bounds;
            NSLog(@"X:%f  Y:%f  Width: %f  Height: %f", eventDrawer.bounds.origin.x, eventDrawer.bounds.origin.y, eventDrawer.bounds.size.width, eventDrawer.bounds.size.height);
            [eventCell.contentView addSubview:eventDrawer];
            [eventCell bringSubviewToFront:eventDrawer];
            eventDrawer.hidden = NO;
        }
    }
}

更新

为了测试并查看是否是我的 XIB 文件或子类导致了问题,我停止使用它,实例化一个 UIView,向其中添加一个 UIButton,然后将其添加到 Cell.contentView 子视图中。当我触摸细胞时,什么也没有发生。

// Grab the selected cell and make sure it's an event cell
        UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
        if ([cell isKindOfClass:[HZEventTableViewCell class]]) {

            // Setup our event cell and our action drawer for use.
            HZEventTableViewCell *eventCell = (HZEventTableViewCell *)cell;

            if (!eventDrawer) {
                eventDrawer = [[UIView alloc] initWithFrame:eventCell.bounds];
                UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 25, 44)];
                [eventDrawer addSubview:button];
            }

            eventDrawer.frame = eventCell.bounds;
            NSLog(@"X:%f  Y:%f  Width: %f  Height: %f", eventDrawer.bounds.origin.x, eventDrawer.bounds.origin.y, eventDrawer.bounds.size.width, eventDrawer.bounds.size.height);
            [eventCell.contentView addSubview:eventDrawer];
            [eventCell bringSubviewToFront:eventDrawer];
            eventDrawer.hidden = NO;
        }
4

3 回答 3

0

尝试在您的自定义 uiview 的 xib 文件集类中设置HZEventDrawerView并更改行

eventDrawer = (HZEventDrawerView *)[[NSBundle mainBundle] loadNibNamed:@"HZEventDrawerView" owner:self options:nil][0];

上:

eventDrawer = [[HZEventDrawerView alloc] initWithNibNamed:@"HZEventDrawerView" bundle:nil];
于 2013-08-18T07:58:40.747 回答
0

以下行是问题:

// Grab the selected cell and make sure it's an event cell
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

您正在从 UITableViewDataSource 中检索一个新单元格!相反,您应该直接从 UITableView 获取单元格:

// Grab the selected cell and make sure it's an event cell
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

干杯!

于 2013-08-19T19:31:38.827 回答
0

而不是eventDrawer.bounds = eventCell.bounds;尝试eventDrawer.frame = eventCell.bounds;

视图的bounds是从内部查看的,因此原点将为 0, 0。但是frame视图的 是相对于其父视图的,因此原点可以不同于 0, 0。

于 2013-08-18T06:33:02.540 回答