팝뷰에서 할 때 데이터를 제출하고 싶을 때 직접 만든 델리멘에서 만든 샘플입니다.

17858 단어 Swift
FistView 상단의 제목을 다시 쓰는 중입니다.

AppDelegate는 일반입니다.이상한 거 없어요.
AppDelegate.swift
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    private var myNavigationController: UINavigationController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let myFirstViewController: FirstViewController = FirstViewController()
        myNavigationController = UINavigationController(rootViewController: myFirstViewController)
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.rootViewController = myNavigationController
        self.window?.makeKeyAndVisible()

        return true
    }
//(あとは省略)
FirstViewController는 위임자입니다.
대개 SecondViewController 대신 popView 를 수행합니다.
FirstViewController.swift
import UIKit

// 自作プロトコルを追加しておく
class FirstViewController: UIViewController, SecondViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.cyanColor()


        // Controllerのタイトルを設定する.
        self.title = "My 1st View"

        /* 【上の文字列をSecondのtextFieldで書き換えてみる】 */


        // ボタンの定義をおこなう.
        let myButton = UIButton(frame: CGRectMake(0,0,100,50))
        myButton.backgroundColor = UIColor.orangeColor()
        myButton.layer.masksToBounds = true
        myButton.setTitle("ボタン", forState: .Normal)
        myButton.layer.cornerRadius = 20.0
        myButton.layer.position = CGPoint(x: self.view.bounds.width/2, y:200)
        myButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)
        self.view.addSubview(myButton);

    }

    /*
    ボタンイベント
    */
    internal func onClickMyButton(sender: UIButton){

        // 移動先のViewを定義する.
        let secondViewController = SecondViewController()

        // デリゲートに、自身クラスのインスタンスを指定
        secondViewController.delegate = self

        // SecondViewに移動する.
        self.navigationController?.pushViewController(secondViewController, animated: true)
    }

    // デリゲートメソッドを記述
    func backFirst(viewController: SecondViewController, str: String) {

        // 実際このviewControllerにはSecondのインスタンスが入ってくる。
        // これが【代理】の作業
        viewController.navigationController?.popViewControllerAnimated(true)

        // strに渡したいデータを入れておいた
        print(str)
        self.title = str
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
SecondViewController는 위임자입니다.
프로토콜을 통해 FirstView가 대신 처리하도록 하세요.
SecondViewController.swift
import UIKit

// プロトコルを自作
protocol SecondViewControllerDelegate {
    func backFirst(viewController: SecondViewController, str: String)
}

class SecondViewController: UIViewController, UITextFieldDelegate {

    private var myTextField: UITextField!

    // delegateを用意
    var delegate: SecondViewControllerDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "My 2nd View"
        self.view.backgroundColor = UIColor.greenColor()

        // UITextFieldを作成する.
        myTextField = UITextField(frame: CGRectMake(0,0,200,30))
        myTextField.placeholder = "文字入力"
        myTextField.delegate = self
        myTextField.borderStyle = UITextBorderStyle.RoundedRect
        myTextField.layer.position = CGPoint(x:self.view.bounds.width/2,y:100);
        self.view.addSubview(myTextField)

        // ボタンの定義をおこなう.
        let myButton = UIButton(frame: CGRectMake(0,0,100,50))
        myButton.backgroundColor = UIColor.orangeColor()
        myButton.layer.masksToBounds = true
        myButton.setTitle("ボタン", forState: .Normal)
        myButton.layer.cornerRadius = 20.0
        myButton.layer.position = CGPoint(x: self.view.bounds.width/2, y:200)
        myButton.addTarget(self, action: "onClickMyButton:", forControlEvents: .TouchUpInside)
        self.view.addSubview(myButton);
    }

    /*
    ボタン押したとき
    */
    func onClickMyButton(sender: UIButton) {
        // デリゲートメソッドを呼び出す
        self.delegate.backFirst(self, str: self.myTextField.text!)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
그게 다야.나는 델리먼에 대해 더 잘 알고 있다고 생각해.감사합니다.

좋은 웹페이지 즐겨찾기