【发布时间】:2019-02-13 07:08:52
【问题描述】:
我有一个表格视图,可以在应用启动时正常工作。当我切换应用程序语言并点击日历文本时,它会调用一个委托方法来过滤数据,设置一个标志并重新加载 tableview。在表视图委托方法中,我检查标志并从适当的数组中获取数据。数组在语言切换后返回 1,但是 cellforRowAt indexPath 方法没有被调用。
extension CalendarViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if (isFilterActive) {
return filteredData.count // returns 1 but cellForRowAt is not getting called
}
return data.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "calendarCell") as! CalendarCell
cell.delegate = self
// ...
}
}
extension CalendarViewController: CalendarViewDelegate {
func filterEvent(for date: Date) {
isFilterActive = true
var i = 0
filteredData = []
filteredImagesData = [:]
for (idx, val) in data.enumerated() {
var fromDate: Date?
var toDate: Date?
// ..
filteredData.append(val)
i = i + 1
}
}
DispatchQueue.main.async {
self.eventTableView.reloadData() // <-- filters and calls reload
}
}
}
DateViewControllerClass which displaysJTAppleCalendarView` 是
class DateViewController: UIViewController {
let delegate = JSDelegate.shared
weak var calendarVCDelegate: CalendarViewDelegate?
@IBOutlet weak var calendarView: JTAppleCalendarView!
override func viewDidLoad() {
calendarVCDelegate = self.delegate.getCalendarViewDelegate()
// ...
}
// ...
}
extension DateViewController: JTAppleCalendarViewDelegate, JTAppleCalendarViewDataSource {
func calendar(_ calendar: JTAppleCalendarView, didSelectDate date: Date, cell: JTAppleCell?, cellState: CellState) {
guard let dateCell = cell as? DateCell else { return }
if (cellState.dateBelongsTo == .thisMonth) {
dateCell.dateLabel.textColor = UIColor.white
dateCell.selectedView.isHidden = false
}
self.calendarVCDelegate!.filterEvent(for: date) // <- calls delegate method on date cell tap
}
}
我在情节提要中连接了delegate 和datasource。我有其他过滤器,如果我在语言切换之前选择了它们,那么只有重新加载表才有效。如何解决这个问题?
【问题讨论】:
-
您是否检查过您的 numberofrows 方法是否被调用?
-
numberOfRowsInSection正在被调用。 -
那么你有没有检查从那里返回的值是什么以及 isFilterActive 的值?
-
两者都符合预期。它返回
1并标记为true。 -
还要交叉检查 tableview 约束
标签: ios swift uitableview delegates arabic-support