gpt4 book ai didi

ios - UIScrollview 中的 UIView 中的 UITableView : On tap in UITableView data gets cleared

转载 作者:行者123 更新时间:2023-11-29 11:03:03 25 4
gpt4 key购买 nike

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

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

在初始启动时,数据完美加载,这意味着 UITableView 充满了数据,UIImage 充满了,Buttons 被正确放置。

但是由于某些奇怪的原因,当我尝试点击或滚动容器中的 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];
}

顺便说一句:我正在使用 Storyboard

提前致以问候和感谢。

最佳答案

更新 2:

我认为 UIPageViewController 会更合适 ( link‌​ )。看起来它完成了您想要实现的目标。并且可能比管理嵌入在其他 ScrollView 中的 ScrollView 简单得多。


更新:

看起来您正在尝试实现的目标在 UIPageViewController ( link ) 中成为可能。如果这可行,那将比尝试管理嵌入在其他 View 中的 ScrollView 更好。


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

Important: You should not embed UIWebView or UITableView objects in UIScrollView objects. If you do so, unexpected behavior can result because touch events for the two objects can be mixed up and wrongly handled. (source)

但这是愚蠢的部分,当您转到源链接时,您会注意到它出现在 UIWebView 的文档中。 Apple 忘记将其包含在 UITableView 的文档中。

关于ios - UIScrollview 中的 UIView 中的 UITableView : On tap in UITableView data gets cleared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14960577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com