Как я могу получить доступ к свойству уже созданного экземпляра - PullRequest
0 голосов
/ 23 июня 2019
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = UINavigationController(rootViewController: MainViewController())
        window?.makeKeyAndVisible()
        return true
    }


class MainViewController: UIViewController {

    lazy var mainTV : UITableView = {
        let tv = UITableView()
        tv.delegate = self
        tv.dataSource = self
        tv.register(MainTableViewCell.self, forCellReuseIdentifier: cellId)
        tv.rowHeight = 1000  // property to access
        return tv
    }()
}



extension SubCollectionViewCell: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = todoTV.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! TodoTableViewCell
        cell.textLabel?.text = todoList[indexPath.row]
        cell.textLabel?.numberOfLines = 0


        if indexPath.row == todoList.count - 1 {
            UIView.animate(withDuration: 0, animations: {
                self.todoTV.layoutIfNeeded()
            }) { (complete) in
                var heightOfTableView: CGFloat = 55.0
                let cells = self.todoTV.visibleCells
                for cell in cells {
                    heightOfTableView += cell.frame.height
                }
                //In here, I wanna access property of instance already created (MainViewController.mainTV.rowHeight)
            }
        }


        return cell
    }
}      

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Когда вы вызываете свойство отложенной переменной, оно инициализирует экземпляр вашего tableView.

  • Я думаю, вам следует создать экземпляр tableView в виде глобальной переменной, подобной этой:

    class MainViewController: UIViewController {
    
        lazy var mainTV : UITableView = {
            let mainTableView = UITableView()
            mainTableView.delegate = self
            mainTableView.dataSource = self
            mainTableView.register(MainTableViewCell.self, forCellReuseIdentifier: cellId)
            mainTableView.rowHeight = 1000
            return tv
        }()
    }
    
  • И затем (в функции cellForRowAt):

    mainTableView.rowHeight = 12345
    

Надеюсь, этот ответ сработает для вас.

edit: Если вы хотите создать табличное представление с динамической высотой строки, вы должны установить;

tableView.estimatedRowHeight // whatever you want
tableView.rowHeight = UITableView.automaticDimension
0 голосов
/ 23 июня 2019

Вы пробовали это?

            let vc = MainViewController()
            let rowHeight = vc.mainTV.rowHeight
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...