如何使用Eureka Forms中的行呈现viewController

由于Eureka用于创建包含不同数据类型的新记录,一个是MediaPicker ,我想知道如何呈现其viewController。

哪一排可以完成这项工作? PushRowButtonRow

这是我的课程,我尝试创建它。

 import UIKit import MediaPlayer import Eureka public final class MusicRow : SelectorRow<T, PushSelectorCell, SelectorViewController>, RowType { public required init(tag: String?) { super.init(tag: tag) presentationMode = .Show(controllerProvider: ControllerProvider.Callback { return AddMusicViewController(){ _ in } }, completionCallback: { vc in vc.navigationController?.popViewControllerAnimated(true) }) } } public class AddMusicViewController: MPMediaPickerController, MPMediaPickerControllerDelegate { var musicPicker: MPMediaPickerController! public var row: RowOf! public var completionCallback : ((UIViewController) -> ())? public override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. // Setup sections/rows for tableView addMusic() } // Initialize musicPicker and customize it func addMusic() { musicPicker = MPMediaPickerController.self(mediaTypes:.Music) musicPicker.delegate = self musicPicker.allowsPickingMultipleItems = true view.addSubview(musicPicker.view) } // After selection, store the data into an array public func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { musicTemp = nil musicTemp = mediaItemCollection if musicTemp == nil { noMusic = true } else { noMusic = false } completionCallback?(self) } // Cancel mediaPickerController public func mediaPickerDidCancel(mediaPicker: MPMediaPickerController){ // Dismiss the picker if the user canceled noMusic = true completionCallback?(self) } } 

以下是我面临的错误。

错误

虽然这是一个通用的问题,但我的要求是使用MPMediaPickerController

以下是我的设置。

 import UIKit import MediaPlayer import Eureka // MusicRow public final class MusicRow : SelectorRow, AddMusicViewController>, RowType { public required init(tag: String?) { super.init(tag: tag) presentationMode = .Show(controllerProvider: ControllerProvider.Callback { return AddMusicViewController(){ _ in } }, completionCallback: { vc in vc.navigationController?.popViewControllerAnimated(true) }) displayValueFor = { guard var musicTitle = $0 else { return "" } musicTitle = musicTemp! let representativeItem = musicTitle.representativeItem print("representativeItem = \(representativeItem)") let representativeItemTitle = representativeItem?.title return "\(representativeItemTitle)" } } } // MusicViewController public class AddMusicViewController : UIViewController, TypedRowControllerType, MPMediaPickerControllerDelegate { public var row: RowOf! public var completionCallback : ((UIViewController) -> ())? lazy var musicPicker : MPMediaPickerController = { [unowned self] in let mediaPicker = MPMediaPickerController.self(mediaTypes:.Music) return mediaPicker }() required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nil, bundle: nil) } convenience public init(_ callback: (UIViewController) -> ()){ self.init(nibName: nil, bundle: nil) completionCallback = callback } public override func viewDidLoad() { super.viewDidLoad() view.addSubview(musicPicker.view) musicPicker.delegate = self musicPicker.allowsPickingMultipleItems = true self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil) } // After selection, store the data into a temporary variable public func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { musicTemp = nil musicTemp = mediaItemCollection if musicTemp == nil { noMusic = true } else { noMusic = false row.value? = musicTemp! } completionCallback?(self) } // Cancel mediaPickerController public func mediaPickerDidCancel(mediaPicker: MPMediaPickerController){ // Dismiss the picker if the user canceled noMusic = true completionCallback?(self) } } 

我相信,根据任何人的个人要求调整它并不难!