【问题标题】:Pass data to the Container View in Swift?将数据传递给 Swift 中的容器视图?
【发布时间】:2015-12-02 21:59:47
【问题描述】:

我在我的 VC 中使用表格视图和容器视图。现在我想将选定的 indexPath.row 发送到我的容器视图。我试图在 Prepareforsegue 的帮助下实现这一目标。但它不起作用。

我认为表格视图和容器视图同时加载。使数据不通过。如果我错了,请纠正我。

我需要实现下面的Layout。

如果从表格单元格中选择了电影,则必须在播放器中播放视频。

提前致谢!

VC PlayerController is the Container view

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        var PlayerScene = segue.destinationViewController as! PlayerController

        if let indexPath = self.LessonTable.indexPathForSelectedRow() {
            let selectedLesson = LessonArray[indexPath.row]
            PlayerScene.selectedDir = Dir[indexPath.row]
            println(Dir[indexPath.row])
            PlayerScene.selectedPath = Path[indexPath.row]
        }
    }

播放器控制器

class PlayerController: AVPlayerViewController {


    var selectedDir :String!
    var selectedPath :String!
    var url:NSURL?

    override func viewDidLoad() {
        super.viewDidLoad()

url  = NSURL(string: "http://www.wine.com/\(selectedDir!)/android/high/\(selectedPath!)")!

        let playerItem = AVPlayerItem(URL: url)
        player = AVPlayer(playerItem: playerItem)
        player.play()
    }

【问题讨论】:

    标签: ios swift uitableview segue uicontainerview


    【解决方案1】:

    您可以使用三种方法将选定的索引或信息从一个类传递到另一个类

    1. 属性:- 在 PlayerController 中为选定的 indexPath 创建一个属性,然后在 prepareForSegue 方法中使用 PlayerScene 对象分配该属性。

    2. Notification :- 您可以通过 NSNotificationCenter 传递字典并在 NSNotificationCenter 处理程序方法中获取该字典。

    3. 方法调用:- 在 PlayerController 类中创建方法,并在 prepareForSegue 方法中使用 PlayerScene 对象调用该方法。

    【讨论】:

      【解决方案2】:

      对于这种情况,您应该使用NSNotificationCenter,因为您需要多次向您的 PlayerController 发送数据。

      A 类 (PlayerController.h)

       //Add Observer in init method
       NSNotificationCenter.defaultCenter().addObserver(self, selector: "handler:", name: "MyNotification", object: nil)
      
      //Handler
      func handler(notif: NSNotification) {
          println("MyNotification was handled");
          println("userInfo: \(notif.userInfo)");
          println("SelectedCellIndex \(notif.userInfo!["selectedCellIndex"])"); //Validate userInfo here. it could be nil
      
      }
      

      B 类

      // Call from any method
      NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil, userInfo: ["selectedCellIndex" : indexPath.row]); // sender data in userInfo as per your requirements    
      

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 1970-01-01
        • 2017-07-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多