ios - 调用 `tableView.reloadData()`后TableView重新加载失败

标签 ios swift uitableview notificationcenter

我有两个标签。第一个选项卡包含一个 UITableViewController,其 tableView 的单元格包含一些单词。第二个选项卡用于设置,包含一个 tableView,带有一个用于设置字体大小的单元格。用户点击单元格后,用户将进入更改字体大小的界面。当用户按下“save”按钮时,(editing-font-size界面中的一个按钮,用于保存调整后的字体大小。)top view controller弹回到原来的tableView进行设置。

我使用观察者在按下保存按钮时发布通知,相应的观察者将更新其 View 。我在 tableView 中添加了一个观察者用于设置,它可以工作。当弹出用于编辑字体大小的顶 View Controller 时,原始 tableView 会显示调整后的字体大小。

但是,当我在第一个选项卡的 UITableViewController 中添加观察者时,tableView 不会重新加载。我在 NotificationCenter.default.addObserver(_:selector:name:object:) 的选择器方法中添加了一条打印消息,并确认调用了选择器方法。选择器方法如下所示:

@objc func reloadTableView() {
    print("The method is called.")
    tableView.reloadData()
}

我在第一个选项卡的 tableView 单元格中使用字体大小的代码:

labelOne.font = UIFont(descriptor: fontDescriptor, size: fontSizeForLabelOne)
labelTwo.font = UIFont(descriptor: fontDescriptor, size: fontSizeForLabelTwo)

这让我很困惑,因为调用了重新加载tableView的方法,但是表格 View 没有重新加载?而且由于字体大小发生了变化,当我滚动 tableView 时,新单元格随机采用旧字体大小或调整后的字体大小。

我也尝试过使用标签,即使它在不同的选项卡中,它也适用于它们。换句话说,我认为问题只出现在 tableView 上。

另一方面,因为它适用于设置选项卡中的 TableView ,所以我说只有在 tableView 大约时调用 tableView.reloadData() 才能重新加载 tableView 是否正确被介绍?如果不显示 tableView 并调用 tableView.reloadData(),什么也不会发生,一切照旧?

简而言之,有没有办法确保在我更改字体大小时重新加载 tableView?

最佳答案

最终我找到了一个解决方案,因为我的 View Controller 由导航 Controller 管理,我弹出 View Controller 并再次加载它作为重新加载 TableView 的替代方法。即,

@objc func reloadTableView() {
    navigationController.popViewController(animated: false)
    navigationController.pushViewController(theViewController, animated: false)
}

唯一的缺点是 View Controller 将被重置为初始状态,即如果 View Controller 中的 TableView 向下滚动,当用户从设置返回 View Controller 时, TableView 是重置到其顶部位置并且不显示滚动到的位置。

关于ios - 调用 `tableView.reloadData()`后TableView重新加载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323311/

相关文章:

ios - iPhone 崩溃、ASIHTTPRequest 或 NSURL 相关

ios - 透明的 UINavigationBar

cocoa-touch - UIWebView:当 "touch up"在链接之外时取消打开链接?

Swift 4 获取定时定时器的当前时间间隔

swift - 我们可以将容器 View 放置在另一个容器 View 中吗?

ios - 旋转后翻译 UIView

ios - Swift 无法将类型 'uiimageview' 的值转换为预期的元素类型 'string'

ios - UITableView - 使用 reloadRowsAtIndexPath

ios - 自定义 UITableViewCell 中的 UIImageview 未正确显示

objective-c - 设置自定义 tableviewCell 的背景