【问题标题】:Programmatic UI: How to reference UITableView created in a custom UIView for View Controller outside of the custom UIView?程序化 UI:如何在自定义 UIView 之外为 View Controller 引用在自定义 UIView 中创建的 UITableView?
【发布时间】:2021-04-04 16:36:06
【问题描述】:

我的应用程序完全以编程方式完成,因此没有 StoryBoard 或 nil/xib 文件。 我的应用程序由一个带有两个选项卡的 UITabBar 控制器组成,每个选项卡都有一个导航栏。我尚未处理的第一个选项卡目前为空白(MenuViewController)。第二个(CafeViewController)将有一个垂直堆栈视图(在安全区域),上半部分有一个 MKMapView,下半部分有一个 UITableView。

我为我的 CafesViewController 创建了一个自定义 UIView,这是我拥有堆栈视图的地方。在那个自定义 UIView 中,我为我的 mapView 和 tableView 放置了代码并添加了所有约束。我需要帮助的是如何继续从 CafesViewController 为 tableView 设置委托和数据源。我不知道如何从 CafesViewController 引用 tableView。

我尝试的是通过在 CafesViewController 上创建 tableView 来创建引用,但我很快意识到它实际上会创建另一个 tableView,而它与我的自定义视图中的不同。我已经在网上搜索了如何执行此操作,但我找不到如何完全以编程方式以及使用位于自定义视图中的 tableView 来执行此操作。注意:我知道视图和 tableView 可以从视图控制器完成,但我试图通过尽可能多的重构来保持我的视图控制器尽可能干净。

我的目标是学习如何首先引用 tableView 的第一步,然后学习重构 tableView 委托和数据源以与 CafesViewController 分开。

这是我的自定义 UIView 和 CafesViewController(我目前正在处理的主控制器)的一些图片

Custom UIView for the CafesViewController

CafesViewController

【问题讨论】:

    标签: ios swift uitableview uiview


    【解决方案1】:

    你可以简单地这样做:

    在 CustomUIView 中,像这样定义两个弱引用:

    weak var delegate : UITableViewDelegate? = nil {
        didSet{
            self.tableView.delegate = delegate
        }
    }
    
    weak var dataSource : UITableViewDataSource? = nil {
        didSet{
            self.tableView.dataSource = self
        }
    }
    

    在您的 viewController 中,在 loadView 方法中:

    var cafesView : CafesView = CafesView()
    cafesView.delegate = self
    cafesView.dataSource = self
    self.view = cafesView
    

    然后,您可以在 ViewController 中简单地实现这两个协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多