Итак, у меня есть следующий случай. Я получил пользовательский макет вкладки, ie горизонтальный UIScollview с подкачкой страниц. На каждой странице есть несколько элементов управления и UITablev ie, «связки» в пользовательском UIView.
Я создаю ContainerV C, у которого есть scrollview, а затем инициализирую два UIViews и добавляю их как subviews в ContainerV C. Для этого я создал пользовательский класс UIView и установил этот UIView в качестве владельца файла .xib. Я также добавляю класс .xib в качестве своего пользовательского UIView.
Хотя это работает, по крайней мере с точки зрения пользовательского интерфейса, у меня есть некоторые проблемы с функциональностью, такие как следующие. В методе init каждого UIView я инициализирую представление с помощью
Bundle.main.loadNibNamed(kCONTENT_XIB_NAME, owner: self, options: nil)
, а затем устанавливаю для UITableViewDelegate и UITableViewDateSource значение self.
Однако, когда данные, которые подают таблица прибывает в представление, и я перезагружаю представление таблицы, ничего не происходит (метод перезагрузки запускается в главном потоке), пока я не прокручиваю UITableview.
Это правильный курс действий?
V C
func createUsageHistoryTabs() -> [Consumption] {
var tabs = [Consumption]()
let v1 = Consumption(pageIndex: 0, viewModel: viewModel)
let v2 = Consumption(pageIndex: 1, viewModel: viewModel)
tabs.append(v1)
tabs.append(v2)
return tabs
}
func setupScrollView() {
if(!hasBeenCreated) {
let tabs = createUsageHistoryTabs()
scrollview.frame = CGRect(x: 0, y: 0, width: container.frame.width, height: container.frame.height)
scrollview.contentSize = CGSize(width: view.frame.width * CGFloat(tabs.count), height: 1.0)
scrollview.isPagingEnabled = true
for i in 0 ..< tabs.count {
let slideView = tabs[i]
slideView.frame = CGRect(x: view.frame.width * CGFloat(i), y: scrollview.frame.origin.y, width: scrollview.frame.width, height: scrollview.frame.height)
scrollview.addSubview(slideView)
}
hasBeenCreated.toggle()
}
}
UIView:
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
convenience init(pageIndex: Int, viewModel: UsageHistoryViewModel) {
self.init(frame: CGRect.zero)
self.pageIndex = pageIndex
self.viewModel = viewModel
commonInit()
}
func commonInit() {
Bundle.main.loadNibNamed(kCONTENT_XIB_NAME, owner: self, options: nil)
contentView.fixInView(self)
setupView()
footer.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleFooterTap)))
viewModel?.cdrDelegate = self
tableView.register(EmptyCell.self, forCellReuseIdentifier: "EmptyCell")
tableView.register(UINib(nibName: "TVCell", bundle: nil), forCellReuseIdentifier: "TVCell")
tableView.allowsSelection = false
tableView.delegate = self
tableView.dataSource = self
}