将ImagePickerController从Delegate类呈现给MainViewController

时间:2019-07-16 11:04:14

标签: ios swift uitableview uiimagepickercontroller

我有一个简单的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,但是我该怎么做。

到目前为止我尝试过的事情:

  • 使TableView Service继承自UIViewController

-> Error message: This ViewController is not in the View hierarchy.

  • 试图将MainTableViewController的一个实例传递给TableViewService,访问该实例并在该实例上调用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错误。

0 个答案:

没有答案