- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经阅读了一些关于静态和动态单元格不兼容的帖子,但我想知道是否有适合我的情况的解决方法。
我有一个静态表(由 UITableViewController
处理)。我在其中一个单元格中放置了一个动态表。委托(delegate)和数据源是两个表的 UITableViewController
,只要内部动态表的行数少于静态表,它就可以很好地工作。当动态表的单元格多于静态表时,我得到一个 index i beyond bounds
异常。
我假设以某种方式静态定义单元格总数并由两个表共享,但无法真正理解到底发生了什么。有人遇到过类似的问题并找到了解决方法吗?
编辑
这是我的 numberOfRowsInSection
方法。在我的委托(delegate)/数据源的每个方法中,我检查调用表是动态表 (_tableOptions) 还是静态表(在这种情况下,我调用父方法)。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == _tableOptions) {
// I return here the number of rows for the dynamic inner table
} else {
return [super tableView:tableView numberOfRowsInSection:section];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == _tableOptions) {
static NSString *simpleTableIdentifier = @"cellOptions";
CellOptions *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
// Doing some stuff with my cell...
return cell;
} else {
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
}
最佳答案
这不是兼容性问题。如果您选择为静态 UITableView 实现编程控制功能,那么您必须确保您不会与它们在 Storyboard中的定义方式发生冲突。
例如,如果您为具有静态单元格的 UITableView 实现此功能
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
}
但是您只为 Storyboard 中的给定 View 和 Controller 添加了 3 个静态单元格,那么 Xcode 不能简单地从无到有再创建 2 个静态单元格。我认为最接近解决方法的是为带有动态单元格的表添加另一个 UITableViewController 。您可以在您正在使用的当前 Controller 中实例化新 Controller ,而无需在屏幕上显示其 View 。然后,您可以将具有动态单元格的 UITableView 指定为新的 UITableViewController 的 tableView 属性。同样,将 UITableView 的委托(delegate)和数据源属性指定为新 Controller 。
编辑:在看到代码后,我知道了一种可能的解决方法。您可以利用部分的数量来欺骗 UITableViewController 执行您想要的操作。
您可以使用下面的代码将任意数量的单元格添加到动态 View 中,因为您将单元格添加到动态表的第二部分,但同时将静态表第二部分中的单元格数设置为 0 . 关键是您必须 将最大数量的单元格添加到 Storyboard中静态表的第二部分。这些将是永远不会显示的虚拟单元格。
在下图中,您可以看到我将静态表格的第二部分设置为 10 个单元格,并且在代码中我能够为 dynamic
tableview 返回最多 10 个单元格。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
if (tableView == dynamic)
{
return 2;
}
else
{
return 1;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (tableView == dynamic)
{
if (section == 1)
{
return 10;
}
}
else
{
if (section == 0)
{
return [super tableView:tableView numberOfRowsInSection:section];
}
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == dynamic) {
static NSString *simpleTableIdentifier = @"sample";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
[cell.textLabel setText:[NSString stringWithFormat:@"cell %d",indexPath.row]];
// Doing some stuff with my cell...
return cell;
}
else
{
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
}
您可以通过实现此功能来清除节标题:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 0;
}
删除部分的标题后,您将得到您想要完成的目标。在静态表的第三个单元格内的动态
表中有 10 个单元格。
关于ios - 静态单元格内的动态 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777878/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!