1

出于工作目的,我需要创建一个嵌入 UIView 的 UIScrollView,而 UIView 又通过 Xcode 中的容器功能嵌入 UITableView。

我的 UIScrollView 是启用了分页的整页滚动视图。我的 UIView 充满了 UIImage、一些 UIButton 和一个链接到 UITableView 的容器。

在初始启动时,数据已完美加载,这意味着 UITableView 已填充数据,UIImage 已填充,并且按钮放置正确。

但是由于某些奇怪的原因,当我尝试在容器中的 UITableView 中点击或滚动时,我的 UITableView 中的所有数据都会被清除。

我在这里发布这个问题,因为我没有在 StackOverFlow 或任何其他网站上发现任何其他类似的问题。

UITableView代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.productTable setBackgroundView:nil];
    self.productTable.backgroundColor = [UIColor clearColor];
    self.productTable.delegate = self;
    self.productTable.dataSource = self;
}

- (void) viewDidAppear:(BOOL)animated {
    /*CGSize tmp = self.productTable.contentSize;
    self.productTable.frame = CGRectMake(0, 0, tmp.width, tmp.height * 3);*/


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    NSLog(@"section count : %i", [self.Products count]);
    return [self.Products count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    xcsSectionInfo *sectionInfo = [self.Products objectAtIndex:section];
    if (sectionInfo.isOpen == NO) {
        return 1;
    } else {
        return 3;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    xcsSectionInfo *sectionInfo = [self.Products objectAtIndex:indexPath.section];

    if (indexPath.row == 0)  {
        static NSString *CellIdentifier = @"Header";
        xcsProductHeaderCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.articleNumber.text = sectionInfo.product.articleNumber;
        cell.articleColor.text = sectionInfo.product.articleColor;
        cell.backgroundColor = [UIColor grayColor];
        if (sectionInfo.isOpen == YES && sectionInfo == self.currentSectionInfo) {
            cell.expandImage.image = [UIImage imageNamed:@"arrow_down.png"];
        } else if (sectionInfo.isOpen == NO) {
            cell.expandImage.image = [UIImage imageNamed:@"arrow_up.png"];
        }
        return cell;
    } else if (indexPath.row == 1) {
         static NSString *CellIdentifier = @"ProductHeader";
        xcsProductTitleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.colorTempHeader.text = @"Color Temperature";
        cell.sourceQualityHeader.text = @"Source Quality";
        cell.sourceTypeHeader.text = @"Source Type";
        cell.luminaireFluxHeader.text = @"Luminaire Flux";
        cell.powerConsumptionHeader.text = @"Power Consumption";
        cell.luminaireEfficacyHeader.text = @"Luminaire Efficacy";
        cell.backgroundColor = [UIColor grayColor];
        return cell;
    } else if (indexPath.row == 2) {

        static NSString *CellIdentifier = @"Product";
        xcsProductCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.colorTemp.text = sectionInfo.product.colorTemperature;
        cell.sourceQuality.text = sectionInfo.product.sourceQuality;
        cell.sourceType.text = sectionInfo.product.sourceType;
        cell.luminaireFlux.text = sectionInfo.product.luminaireFlux;
        cell.powerConsumption.text = sectionInfo.product.powerConsumption;
        cell.luminaireEfficacy.text = sectionInfo.product.luminaireEfficacy;
        cell.backgroundColor = [UIColor grayColor];
        return cell;
    }
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        xcsSectionInfo *sectionInfo = [self.Products objectAtIndex:indexPath.section];
    NSIndexPath *path0 = [NSIndexPath indexPathForRow:[indexPath row]+1 inSection:[indexPath section]];
    NSIndexPath *path1 = [NSIndexPath indexPathForRow:[indexPath row]+2 inSection:[indexPath section]];
            NSArray *indexPathArray = [NSArray arrayWithObjects: path0, path1, nil];
    if (sectionInfo.isOpen == NO) {
        sectionInfo.isOpen = YES;
        [tableView insertRowsAtIndexPaths:indexPathArray withRowAnimation:NO];
    } else {
        sectionInfo.isOpen = NO;
        [tableView deleteRowsAtIndexPaths:indexPathArray withRowAnimation:NO];
    }
    [self.Products replaceObjectAtIndex:indexPath.section withObject:sectionInfo];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    self.currentSectionInfo = sectionInfo;
    [tableView reloadData];
}

顺便说一句:我正在使用故事板

提前致以问候和感谢。

4

1 回答 1

2

更新 2

我认为 aUIPageViewController会更合适(链接‌​</a>)。看起来它完成了您想要实现的目标。并且可能比管理嵌入在其他滚动视图中的滚动视图简单得多。


更新

看起来您想要实现的目标在UIPageViewController(链接) 中成为可能。如果这可行,它会比尝试管理嵌入在其他视图中的滚动视图更好。


UITableView苹果特别不推荐嵌入 a 。当系统试图找出将事件发送到哪里时,就会出现冲突:

重要提示:您不应该在 UIScrollView 对象中嵌入 UIWebView 或 UITableView 对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆并错误处理。(来源

但这是愚蠢的部分,当您转到源链接时,您会注意到UIWebView. Apple 忘记将其包含在 UITableView.

于 2013-02-19T22:52:32.433 回答