"cellForRowAtIndexPath" for a tableview inside alertviewcontroller not called 在 AlertViewController 内的 TableView 中 "cellForRowAtIndexPath" 方法未被调用。
"cellForRowAtIndexPath" for a tableview inside alertviewcontroller not called 在 AlertViewController 内的 TableView 中 "cellForRowAtIndexPath" 方法未被调用。
我在alertviewcontroller中添加了一个tableview,我为table指定了delegate和datasource。除了cellForRowAtIndexPath方法外,所有的delegate和datasource方法都被调用。我已经返回了一个固定的值作为每个section中的行数,以防止0行出现。然而,问题仍然存在。
在一个UIAlertController
中,你不应该修改视图层次结构。你需要创建一个模仿警告控制器的自定义视图控制器,或者找到一个能为你完成这个工作的框架。
引用苹果文档的话:
这个类的视图层次结构是私有的,不能被修改。
在一个表格视图中,cellForRowAtIndexPath
方法用于为每个单元格提供数据和样式,但在一个UIAlertController
中,这个方法不会被调用。这是因为UIAlertController
的视图层次结构是私有的,无法进行修改。
要解决这个问题,你可以考虑下面两种方法之一:
1. 创建一个自定义视图控制器,模仿警告控制器的外观和功能。这样你就可以在其中使用表格视图,并实现cellForRowAtIndexPath
方法来为每个单元格提供数据和样式。
2. 寻找一个能为你完成这个工作的框架。有一些第三方框架可以帮助你创建自定义的警告控制器,其中包括表格视图和其他自定义视图。
无论哪种方法,你都需要遵循苹果文档中的建议,不要修改UIAlertController
的视图层次结构。只有这样,cellForRowAtIndexPath
方法才会被调用,并正确显示表格视图的内容。
UITableView inside UIAlertController is not designed to handle dynamic data and does not call the "cellForRowAtIndexPath" method.
To solve this issue, it is recommended to create a custom UIViewController and add the required functionality. This custom view controller can then be presented as a Form Sheet.
Here is an example of how to present a custom view controller as a Form Sheet:
// Create a custom view controller
let customViewController = CustomViewController()
// Set the presentation style to Form Sheet
customViewController.modalPresentationStyle = .formSheet
// Present the custom view controller
present(customViewController, animated: true, completion: nil)
By using a custom view controller, you have more control over the table view and can implement the "cellForRowAtIndexPath" method to handle dynamic data.