【问题标题】:IOS Swift : TableViewController with inner TableView in a static cellIOS Swift:在静态单元格中带有内部 TableView 的 TableViewController
【发布时间】:2018-01-02 23:36:29
【问题描述】:

Comparison : left TableViewController : not Working ; right ViewController : working

左侧 Controller 中的内部 tableView 存在问题: 因为左控制器是一个带有静态单元格的 TableViewController,它无法实现 UITableViewDelegate、UITableViewDataSource 协议,所以我不能使用 TableViewController 类作为内部 tableView 的委托。

我创建了一个类 (InnerTVDelegate),它充当内部 tableView 的委托,并将 tableView 委托/数据源设置为 InnerTVDelegate 的一个实例,但它不起作用。

这是我的课程:

导入 UIKit

类 MyTableViewController: UITableViewController {

@IBOutlet weak var innerTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    innerTableView.delegate = InnerTVDelegate()
    innerTableView.dataSource = InnerTVDelegate()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

类 InnerTVDelegate : NSObject, UITableViewDelegate, UITableViewDataSource {

var items: [String] = ["We", "Heart", "Swift"]


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.items.count;
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "InnerTVTableViewCell") as! InnerTVTableViewCell

    cell.mytextLabel?.text = self.items[indexPath.row]

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("You selected cell #\(indexPath.row)!")
}

}

这有什么问题?

谢谢

【问题讨论】:

    标签: ios swift uitableview tableview


    【解决方案1】:

    试试这个

    @IBOutlet weak var innerTableView: UITableView!
        var tvDelegate:InnerTVDelegate()!
        override func viewDidLoad() {
            super.viewDidLoad()
            tvDelegate = InnerTVDelegate()
            innerTableView.delegate = tvDelegate
            innerTableView.dataSource = tvDelegate
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    

    【讨论】:

    • 谢谢,它有效:) 你能解释一下为什么你刚刚将 tvDelegate 声明为实例变量。是因为我使用了 2 个不同的实例作为 delagate 和 dataSource 吗?
    • 没有。 InnerTVDelegate() 返回一个自动释放的对象。它刚刚发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多