【问题标题】:Swift how to add UITableView to UIViewController with custom UITableView classSwift 如何使用自定义 UITableView 类将 UITableView 添加到 UIViewController
【发布时间】:2014-11-02 19:08:57
【问题描述】:

谁能帮我解决下一个问题:

我试图将UIView(从UITableView 子类化)到UIViewController 的下一个方式:

class CustomTableView: UITableView, UITableVIewDelegate {
      override var delegate: UITableViewDelegate? {
      get {
           return self.delegate
      }
      set {
          self.delegate = newValue
      }
   }
}

class ViewController: UIViewController, UITableVIewDelegate  {
      @IBOutlet weak var tableView: CustomTableView

      override func viewDidLoad() {
          super.viewDidLoad()
          self.tableView.delegate = self
      }

      func tableView(tableView: UITableView. didSelectRowAtIndexPath indexPath: NSIndexPath) {
           //Not called
      }
}

IB 中,我将UIView 放在UIViewController 上。但是应用程序在

中出现异常崩溃
set {
              self.delegate = newValue
          }

有人知道我做错了什么吗?

【问题讨论】:

  • 你为什么要覆盖委托?它没有做任何不同的事情。
  • 你是对的。好像什么都没做。我只想检查当我尝试设置委托时发生了什么,因为没有它我的 didSelectRowAtIndexPath 不会被调用。好像 ViewController 不知道 CustomTableView,我想知道为什么
  • 如果您发布实际的崩溃日志会有所帮助。
  • 似乎应用程序刚刚进入“self.delegate = newValue”行的无限循环并且没有给我任何错误日志。现在我想这只是在 UIViewController 上添加 UITableView 的一种不好的方法,或者我需要为它实现一些自定义委托。但我不确定最后一个。
  • 不是self.delegate = newValue触发了setter,它触发了self.delegate = newValue等?这看起来像一个无限循环

标签: ios uitableview uiview swift


【解决方案1】:

self.delegate = newValue 正在调用它的设置器;这又叫它的二传手。这是一个无限循环。

这可以解决您的问题: 1. 添加一个 uitableview 作为你的 viewcontroller 视图的子视图。 2.将viewcontroller设置为tableview的datasource和delegate。 3.然后您可以根据需要自定义tableview。

【讨论】:

  • 你是对的,这是一个无限循环。所以我像这样“delegate = newValue!”重写了它。那必须有效(或无效?)。但我有和以前一样的问题。对于第二个。我不能将 UITableView 设置为 ViewController 的子视图,因为我需要一个带有静态单元格的 UITableView,而它在 UIVIewController 上是不可能的。所以,我把 UIView 放在我的 ViewController 上并从 UITableView 继承它。
猜你喜欢
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多