从App Delegate调用ViewController的方法

时间:2015-11-14 18:03:30

标签: ios swift appdelegate

在我的ViewController,Inbox中,我想从我的App Delegate中调用方法playAudio()。

这是方法。

func playAudio(){

        let nowPlaying = MPNowPlayingInfoCenter.defaultCenter()

        let albumArtWork = MPMediaItemArtwork(image: UIImage(named: "testImage.jpg")!)

        nowPlaying.nowPlayingInfo = [MPMediaItemPropertyTitle:"Sonnnngggg",
            MPMediaItemPropertyArtist:"Arrrtttiiiissstttt",
            MPMediaItemPropertyArtwork:albumArtWork]
        audioPlayer.play()

    }

我想从我的应用代表那里打电话......

if event!.subtype == UIEventSubtype.RemoteControlPlay {
                print("received remote play")
                //audioPlayer.play()
                Inbox.playAudio()
            }

一个问题是,因为我有一个audioPlayer和我的收件箱ViewController中的所有东西,并且它可能已经在播放音频,所以制作一个Inbox实例来调用playAudio是没有意义的( )。所以,如果Swift中有任何变通方法,请告诉我。

谢谢, 利安

3 个答案:

答案 0 :(得分:1)

在AppDelegate中更改为:

if event!.subtype == UIEventSubtype.RemoteControlPlay {
            print("received remote play")
            //audioPlayer.play()
            NSNotificationCenter.defaultCenter().postNotificationName("RemotePlayPressed", object: self)
        }

然后在收件箱视图控制器的viewDidLoad中添加:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "playAudio", name: "RemotePlayPressed", object: nil)

还添加:

deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

到收件箱视图控制器。

答案 1 :(得分:0)

在您的viewcontroller中,您可以通过

到达appdelegate

(UIApplication.sharedApplication().delegate as! AppDelegate).playAudio()

答案 2 :(得分:0)

您可以实例化AppDelegate并调用您想要的功能

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.someFunction()

但这似乎不是一个好的实践......

NSNotificationCenter:

在您要调用该函数的位置使用此代码:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "anotherFunction", name: "SomeNotification", object: nil)

anotherFunction 更改为您要调用的函数名称。

在AppDelegate上:

NSNotificationCenter.defaultCenter().postNotificationName("SomeNotification", object: nil)