是否有一种简单的方法来堆叠多个表视图,一个在另一个之上?我的情况是我有3个表视图:
当添加了足够类型A或B的记录时,我希望整个视图根据需要滚动,就像它是一个表视图一样。
我想要的结果与编辑联系人屏幕非常相似:
顶部(First,Last,Company)相当于我的第一张桌子。电话号码部分相当于我的第二部分,电子邮件部分相当于我的第三部分。
我不知道联系人屏幕是否实际使用多个表。我做知道,如果我可以将我的功能分解为单独的表而不是试图将它们全部合并为一个,那么它将使我的生活变得更加容易。
我尝试过的方法是:
UIViewController
UITableViewController
实例)禁用滚动UIView
的视图中
UIView
已添加到UIScrollView
UIScrollView
是我控制者的唯一子女这导致没有显示任何内容。我唠叨了一下,发现为我的孩子视图手动指定框架使它们可见,但我无法与他们的内容互动。
所以,我的问题是:如何在利用自动布局的同时垂直堆叠多个表视图?
答案 0 :(得分:1)
你可以这样做,但除非我遗漏某些东西,否则根本不需要它。我将采用的方法只是一个包含多个原型单元的表视图,其中您的代码将每个“表视图”定义为您的案例中的一个部分,您只需选择适当的原型单元格。当然,这些单元格中的每一个都可以拥有自己的类,因此在定制方面几乎无限。我很肯定这就是Apple在你展示的联系人应用程序中所做的事情。
这是我一直采用的方法,我认为没有理由说它不适合你。附件是基本概念的屏幕截图。每个单元格都有唯一的类和标识符。
然后你在代码中做了类似的事情(不是很明显,这只是我代码中的一个例子)。你会看到,对于我检查的每个条件,我选择一个不同的单元类并根据需要进行自定义:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = NULL;
BOOL searchDisplayControllerIsActive = _searchController.isActive;
if (searchDisplayControllerIsActive) {
if ([_searchResults count] == 0) {
if (self.activeConnection != nil) {
SearchingTableViewCell *searchCell = [self.tableView dequeueReusableCellWithIdentifier:@"SearchingCell" forIndexPath:indexPath];
[searchCell.activityView startAnimating];
cell = searchCell;
}
else {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"NoResultsCell" forIndexPath:indexPath];
}
}
else {
SearchResultTableViewCell *thisCell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultCell" forIndexPath:indexPath];
Movie *thisMovie = [self.searchResults objectAtIndex:indexPath.row];
[thisCell.posterImage sd_setImageWithURL:[NSURL URLWithString:thisMovie.imdbBigPosterURL] placeholderImage:[UIImage imageNamed:@"SmallMovieReel"]];
thisCell.titleLabel.text = thisMovie.title;
if (thisMovie.in_wanted) {
thisCell.wantedImage.alpha = 1.0;
}
else {
thisCell.wantedImage.alpha = 0.1;
}
if (thisMovie.in_library) {
thisCell.manageImage.alpha = 1.0;
}
else {
thisCell.manageImage.alpha = 0.1;
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy"];
thisCell.yearLabel.text = [dateFormatter stringFromDate:thisMovie.releaseDate];
cell = thisCell;
}
}
return cell;
}