如何区分位于 2 个不同类中的表视图
Posted
技术标签:
【中文标题】如何区分位于 2 个不同类中的表视图【英文标题】:How to differentiate between table views located in 2 different classes 【发布时间】:2018-10-17 10:09:36 【问题描述】:我有一个包含表格视图的主视图控制器,并且该表格视图包含一个包含另一个表格视图的单元格。我希望主视图控制器充当两个表视图的委托和数据源,除非如果一个在表视图单元格类中,我如何区分两者。我尝试根据标签和名称(在其他 SO 答案中)进行区分,但它们不起作用,因为表视图并不都位于同一个视图控制器类中。提前致谢。
【问题讨论】:
嘿 Eri,首先为什么要在单元格内使用 tableview 的委托和数据源,您可以在单元格类中添加委托和数据源,并在那里传递您的 mainviewcontroller 数据 obj,如果您也想要这样您可以访问一些属性,然后在这种情况下创建协议并处理它们 参考-> ***.com/questions/16195660/… 【参考方案1】:既然你提到你在另一个 UITableView 的单元格中有一个 UITableView,我假设内部 tableView 的插座归外部 tableView 的单元格所有。因此,我相信您将无法进行直接等效检查。
可能有不同的方法来解决这个问题。
一种快速的方法是创建 2 个 UITableView 子类,并为每种类型的 tableView 使用一个(例如,OuterTableView 和 InnerTableView 类;或者甚至创建1 个子类可以达到目的)。
示例代码:
class OuterTableView: UITableView
class InnerTableView: UITableView
class YourViewController: UIViewController, UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if tableView is OuterTableView
// Return the corresponding row count.
return 2
else if tableView is InnerTableView
// Return the corresponding row count.
return 1
else
return 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
//
// You may use only one sub-class also for the identification
//
if tableView is OuterTableView
return UITableViewCell()
else
return UITableViewCell()
注意:不要忘记在界面构建器中为您的 UITableView 元素分配相应的类。
【讨论】:
您的答案正是我想要的!快速提问:当我使用您的技术并将表格视图子类化时,它需要一个框架。这个框架是否重要,因为我只是将表格视图锚定到单元格的边界?到目前为止,我刚刚为框架设置了随机高度和宽度值,一切都按预期工作,但我不确定设置随机值是否会影响任何事情。 干杯!不,您不必担心其他任何事情。你可以用你对待和配置普通 tableViews 的所有不同方式来对待这些。它会正常运行。【参考方案2】:我认为您可以检查 rowAtindexPath 中表格视图的名称和单元格部分方法的数量。 喜欢
如果 tableView == tableViewOne 返回 10 else if tableView == tableViewTwo 返回 20
【讨论】:
以上是关于如何区分位于 2 个不同类中的表视图的主要内容,如果未能解决你的问题,请参考以下文章
我应该在哪里添加我的子视图以使其位于 UITableViewController 中的表视图下?
由于嵌入式表格视图,Swift 无法使用 hidesBarsOnSwipe