gpt4 book ai didi

iOS - UIView 内的 UITableView

转载 作者:搜寻专家 更新时间:2023-11-01 06:54:03 24 4
gpt4 key购买 nike

我想显示一个 UITableViewUIViewController 里面.这个 View Controller 包含一个 UISegmentedControl有两个屏幕(FirstViewControllerSecondViewController)。

第一个 View Controller 是包含 UIViewTable 的 View Controller (请不要介意第二个)。

当我在模拟器中执行该应用程序时,一切正常,但是当我尝试在第一个 ViewController 中滚动表格 View 时,单元格消失了。让它们重新出现的唯一方法是终止应用程序并重新打开它。

我是 iOS 开发的新手(我来自 Android),显然我在这里遗漏了一些东西。

我已经尝试添加 UIViewTable在容器外 UIView它工作正常。所以我猜问题与容器或分段控件有关...

这是我的实现:

  • Storyboard

storyboard config UIViewControllerUISegmentedControlUIView (其中将包含分段控件的两个屏幕)。

  • View Controller

    @IBOutlet weak var container: UIView!
    var sectionViews:[UIView]!

    override func viewDidLoad() {
    super.viewDidLoad()

    sectionViews = [UIView]()
    sectionViews.append(FirstViewController().view)
    sectionViews.append(SecondViewController().view)
    for v in sectionViews {
    container.addSubview(v)
    }
    container.bringSubviewToFront(sectionViews[0])
    }

    @IBAction func switchViewsAction(_ sender: UISegmentedControl) {
    self.container.bringSubviewToFront(self.sectionViews[sender.selectedSegmentIndex])
    }
  • 第一个 View Controller

FirstViewController有一个 swift和一个 xib文件,并且有两个文件 Cell.swiftCell.xib对于表格单元格。

FirstViewController.swift

@IBOutlet weak var tableView: UITableView!
let cellID = "CellId"

override func viewDidLoad() {
super.viewDidLoad()

self.tableView.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: cellID)
self.tableView.dataSource = self
self.tableView.delegate = self
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 100
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! Cell
cell.label.text = "\(indexPath.row)"
return cell
}

FirstViewController.xib

enter image description here

细胞.xib

enter image description here

任何帮助将不胜感激!谢谢

最佳答案

一个明显的问题是您在说 container.addSubview(v) 时没有给 v 任何框架或约束。由于您使用自动布局来定位 container,因此您也应该使用自动布局来定位 v。您应该将其顶部、底部、前导和尾随 anchor 设置为与 container 的 anchor 相同,constant 为零。 (并将其 translates... 设置为 false。)在循环中对 v 的两种情况执行此操作。

但是,还有一个更严重的问题,即您通过 FirstViewController()SecondViewController() 创建的 View Controller 不会被保留。因此,他们消失在一阵烟雾中。他们因此失去了功能;例如, TableView 不再有任何数据源或委托(delegate),因此它没有单元格。

你的所作所为是完全违法的。您不能简单地使用 View Controller 来“进入垃圾箱”,作为一种抓取其 View 并将其 View 随意推送到界面中的方式。您必须使 View Controller 成为父 View Controller (在本例中为 Item)的 View Controller 。为了确保 subview Controller 在 View Controller 层次结构中有适当的位置,并以良好的顺序接收 View Controller 必须接收的所有消息,您必须精心设计舞蹈,而您不是在跳舞。

有关如何跳舞的示例,例如,请参阅我的答案

关于iOS - UIView 内的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54975514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com