我有一个简单的TableViewController(MainTableViewController)。 委托和数据源方法位于单独的swift文件(TableViewService)中。
类签名:
class TableViewService: NSObject, UITableViewDelegate, UITableViewDataSource, LocationObserver {
在委托方法中
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
我想展示一个ImagePickerController
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("\(indexPath)")
if indexPath.section == 0 {
let imagePicker = UIImagePickerController()
imagePicker.delegate = cameraService
if UIImagePickerController.isSourceTypeAvailable(.camera) {
imagePicker.sourceType = .camera
}
else {
imagePicker.sourceType = .photoLibrary
}
present(imagePicker, animated: true, completion: nil) <-- here is the problem
}
}
这不起作用,因为TableViewService继承自NSObject,而不是UIViewController类。我想在MainTableViewController上显示此ImagePickerController,但是我该怎么做。
到目前为止我尝试过的事情:
-> Error message: This ViewController is not in the View hierarchy.
present
方法……但这是不好的做法,并且还会导致Bad access
错误。 / li>
如何显示imagePickerController?
我们非常感谢您的帮助。 谢谢。
编辑:
将当前实例传递到TableViewService
class NewReportTableViewController: UITableViewController, LocationObserver{
let locationManager = CLLocationManager()
let locationService = LocationService()
let tableViewService = TableViewService()
let headerTitle = ["Bild", " Kategorie", "Kommentar", "Standort", "Datum"]
override func viewDidLoad() {
super.viewDidLoad()
tableViewService.nrtVC = self
tableViewService.headerArray = headerTitle
tableView.delegate = tableViewService
tableView.dataSource = tableViewService
...
在TableViewService
中的定义,用于保存NewReportTableViewController
的当前实例
class TableViewService: NSObject, UITableViewDelegate, UITableViewDataSource, LocationObserver {
var headerArray = [String]()
var contentData = ["Kein Foto ausgewählt", "Bitte wählen...", "Kommentar schreiben...", "", ""]
weak var nrtVC = NewReportTableViewController()
let cameraService = CameraService()
//MARK: - TableView DataSource
func numberOfSections(in tableView: UITableView) -> Int {
...
即使我删除了弱点,也会出现此Bad access
错误。