如何区分位于 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 使用一个(例如,OuterTableViewInnerTableView 类;或者甚至创建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 中的表视图页脚

由于嵌入式表格视图,Swift 无法使用 hidesBarsOnSwipe

与从 2 个不为空的表中获取数据相关的数据库查询

如何在 MVC 的单个视图中制作插入表单和显示来自数据库的数据的表?

结合工程实践选题调研分析同类软件产品