2016-09-07 3 views
1

私が持っている私の迅速なファイルの現在のvisibleViewControllerどのように私は、別の迅速なファイル上の参照からUIViewControllerの関数を呼び出すことができますか?

let currentController = self.navigationController?.visibleViewController 

と私は​​と呼ばれる実際のUIViewControllerに関連した迅速なファイルの機能を持っています。

私がしようとしているのは、最初のファイルからその関数を呼び出すことですが、それを行うことはできません。私がやってみました:

currentController.chargeData() 

をが、エラーが表示されます: '?のUIViewController' タイプの

値を何のメンバーのchargeData "

を持っていない私は、もちろん、それは実際のUIViewControllerが関連付けされている迅速なファイルを認識していないことをエラーログから推測することができます。

実際のUIViewControllerの機能にアクセスするにはどうすればよいですか?

ありがとうございます!

答えて

2

自分で作成したメソッドを呼び出すには、currentController変数を型キャストする必要があります。

let currentController = self.navigationController?.visibleViewController as? YourViewController //Here YourViewController is the name of the UIViewController subclass you created 

これが役に立ちます。

+0

ありがとうございます!それはまさに私が欲しかったものです。 –

1

あなたは遠く離れていません。ビューコントローラーにアクセスできますが、Swiftはどのタイプのものか分かりません。実際にはわからない場合はUIViewController?と思っています。

必要なのは型キャストです。あなたのクラスはViewControllerと呼ばれていた場合、あなたはこれを記述します。

if let currentController = self.navigationController?.visibleViewController as? ViewController { 
    currentController.chargeData() 
} 
+0

ありがとうございました!それはまさに私が必要としたものです。私は受け入れられるように複数のオプションをマークすることができなかったことは悲しいです。代わりにUpvote :) –

0

あなたの特定のタイプにUIViewControllerからあなたcurrentControllerをキャストしたくない場合は、あなたが使用できるのObjective-CのperformSelector

let selector = Selector("chargeData") 
if currentController?.respondsToSelector(selector) == true { 
    currentController!.performSelector(selector) 
} 
0
let currentController = self.navigationController?.visibleViewController 

NavigationControllerのVisibleViewControllerメソッドはUIViewController型を返し、メソッドがUIViewControllerで見つからないようにします。

let currentController = self.navigationController?.visibleViewController as! YourVC. 

これでメソッドを呼び出すことができます。

スウィフトタイプでは暗黙的に検索されません。

関連する問題