2017-03-24 24 views
0

2つのView Controllerを使用してラベルに"asdf"と表示させるようにiOSアプリでラベルを作成しようとしています。Swiftの別のクラスにある関数を呼び出す方法は?

私はtestA()機能を実行しようが、それはエラーを示していますViewController.swift:15:9: Use of unresolved identifier 'testA'

私の最初のコード:

ViewController.swift
import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     testA() 
    } 
} 
別のコントローラ(TestViewController)では:
import UIKit 

class TestViewController: UIViewController { 
    @IBOutlet weak var testLabel: UILabel! 

    func testA() { 
     testLabel.text = "asdf" 
    } 

} 

Main.storyboardはTestViewControllerクラスにリンクされています

私はgoogleで少しの検索を行い、継承を試してみたところ、エラーは表示されませんでしたが、関数は呼び出されませんでした。

私は継承メソッドを使用してみてください:ビューコントローラ(ViewController.swift)で

を:
import UIKit 

class ViewController: TestViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     testA() 
    } 
} 

エラーが解決されましたが、ラベルは私が作るにはどうすればよいasdf

に変更されませんでした私のViewController.swiftは、別のコントローラTestViewController.swiftにあるtestA()という関数を呼び出すことができますか?

+0

あなたはSwiftとプログラミング全般にとって非常に新しいようです。 ios開発を開始する前にオブジェクト指向チュートリアル/クラスを取ることをお勧めします。 –

答えて

1

NSNotificationを使用するか、最初のビューの後に2番目のビューを読み込む場合は、委任を使用できます。

+0

これはOPに役立つかもしれないが、答えではないコメントでなければならない。 –

+0

このNSNotificationソリューションは、ViewAへの参照を保存できない場合、多くのOPに役立ちます。 – muescha

0

公共testA()機能と最初にoverride func viewDidLoad() ViewControllerの輸入TestViewControllerで

TestViewController.testA() 

を呼び出します。

+0

このようなメソッドを呼び出すには、クラスまたは静的メソッドを呼び出すメソッドを宣言する必要があります。 –

0

そのクラスのオブジェクトを作成することができます。この関数を以下のように呼び出すことができます。

let testVC = TestViewController() 

は今

testVC.testA() 

またはより良いアプローチは、あなたが多くの場所からそれを呼び出したい場合はclass funcを作成することであるオブジェクトを使用して関数を呼び出すと、そのオブジェクトの独立したのです。

class Helper { 
    class func testFunction() { 
     // Do something 
    } 
} 

上記のシナリオでは、オブジェクトをクラスメソッドとして作成する必要はないため、以下のように呼び出すことができます。

Helper.testFunction() 
関連する問題