ホームページ  >  記事  >  ウェブフロントエンド  >  Swift のプロトコル構文を使用して、pages_html/css_WEB-ITnose 間の値の転送を実装します。

Swift のプロトコル構文を使用して、pages_html/css_WEB-ITnose 間の値の転送を実装します。

WBOY
WBOYオリジナル
2016-06-24 11:57:031099ブラウズ

新しい開発言語 Swift のリリースと Xcode 6.0.1 の正式リリースにより、3 年近く Objective-C を使用した開発を経て、Swift を使用して iOS コードを記述することが目前に迫っています。このエレガントな構文を使用して、ページ値転送のデモを比較して実装します。ページ値転送には、プロトコルと委任という非常に難しい構文が含まれるため、iOS の学習の初期段階では必須のデモです。ここで関係する Swift 構文と、基本的な操作については詳しく説明しません。必要に応じて、詳細な概要が記載されている IT インタビュー ガイド APP をダウンロードしてください。早速、コードを使用して実装してみましょう。次の関数:

1. Swift プロジェクトを作成します。ここで重要なのは、.h ファイルではなく、.swift ファイルであることに注意してください。

2. 電話画面の表示名を変更します。これは、戻るか戻るかわかりません。後で回復する方法を見てみましょう。定義する基本的な Swift 構文: プロトコル、順方向値転送および逆方向値転送、つまりコールバック

4. XIB をデフォルトのコードに変更する、つまり XIB ファイルを削除する方法について簡単に説明します

5.ホームページで学生番号を入力し、「登録」をクリックすると、前のページで入力した学生番号が表示されます。名前を入力して「OK」をクリックします。前のページに移動して名前を表示します

以上です。具体的に実装してみましょう。初心者の場合は、次の手順に従ってください。

1. 作成します。プロジェクトの全体的なコード構造は次のとおりです:

何も言うことはありません、次のステップに進みましょう

次に、純粋なコードでホームページ (HomeViewController.swift) と登録ページ (RegisterViewController.swift) を構築します

class HomeViewController: UIViewController,RegisterDelegate {        var nameLbl : UILabel!    var numTF : UITextField!        override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view.        self.view.backgroundColor = UIColor.whiteColor()        let titleItem : UINavigationItem = UINavigationItem(title: "首页")        let NVC : UINavigationBar = UINavigationBar(frame: CGRectMake(0, 20, 320, 44))        NVC.setItems([titleItem], animated: true)        self.view.addSubview(NVC)                                numTF = UITextField(frame: CGRectMake(10, 100, 300, 35))        numTF.placeholder = "输入学号"        numTF.borderStyle = UITextBorderStyle.Line        numTF.textAlignment = NSTextAlignment.Center        numTF.clearButtonMode = UITextFieldViewMode.WhileEditing        self.view.addSubview(numTF)                nameLbl = UILabel()        nameLbl.frame = CGRectMake(10, 150, 300, 40)        nameLbl.text = ""        nameLbl.backgroundColor = UIColor.lightGrayColor()        nameLbl.textAlignment = NSTextAlignment.Center        self.view.addSubview(nameLbl)                                let registerBtn : UIButton = UIButton()        registerBtn.frame = CGRectMake(10, 200, 300, 40)        registerBtn.backgroundColor = UIColor.lightGrayColor()        registerBtn.setTitle("注册", forState: UIControlState.Normal)        registerBtn.addTarget(self, action: "registerClick:", forControlEvents: UIControlEvents.TouchUpInside)        self.view.addSubview(registerBtn)            }
ナビゲーションに注意してください。 列コードとさまざまな UI コードが非常に奇妙な方法で書かれています。このようにして、ホームページ UI は 320 にのみ適応します。が作成され、クリック イベントが実装されます:


 func goRegister(){                if numTF.text.isEmpty {                        var alert : UIAlertView = UIAlertView(title: "不能为空", message: "填写你的学号", delegate: nil, cancelButtonTitle: "知道了")            alert.show()            numTF.becomeFirstResponder()                    }else{                        var rootVC :RegisterViewController = RegisterViewController()            let NVC :UINavigationController = UINavigationController(rootViewController: rootVC)            self.presentViewController(NVC, animated: true, completion: nil)        }            }
これにより、登録ページ (RegisterViewController.swift) が表示されます。登録ページのコードを貼り付けます:


class RegisterViewController: UIViewController,UITextFieldDelegate{    var nameTF : UITextField!    var num : String!        override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view.                self.view.backgroundColor = UIColor.whiteColor()        self.title = "注册"                let leftItem : UIBarButtonItem? = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: "back")        self.navigationItem.leftBarButtonItem = leftItem                        let numLbl : UILabel = UILabel()        numLbl.frame = CGRectMake(10, 100, 300, 40)        numLbl.text = self.num        numLbl.backgroundColor = UIColor.lightGrayColor()        numLbl.textAlignment = NSTextAlignment.Center        self.view.addSubview(numLbl)                       nameTF = UITextField(frame: CGRectMake(10, 150, 300, 35))        nameTF.placeholder = "输入姓名"        nameTF.textAlignment = NSTextAlignment.Center        nameTF.borderStyle = UITextBorderStyle.Line        nameTF.clearButtonMode = UITextFieldViewMode.WhileEditing        nameTF.delegate = self        self.view.addSubview(nameTF)                        var submitBtn : UIButton = UIButton(frame: CGRectMake(10, 210, 300, 40))        submitBtn.backgroundColor = UIColor.lightGrayColor()        submitBtn.setTitle("确定", forState: UIControlState.Normal)        submitBtn.addTarget(self, action: "submitClick:", forControlEvents: UIControlEvents.TouchUpInside)        self.view.addSubview(submitBtn)    }
ここにキャンセル ボタンがあります。その他はホームページと同じで、クリック確認コードが実装されています:


 func submitClick(sender : UIButton)    {        goBack()    }        func goBack(){                if nameTF.text.isEmpty {                        var alert : UIAlertView = UIAlertView(title: "不能为空", message: "填写你的名字", delegate: nil, cancelButtonTitle: "知道了")            alert.show()            nameTF.becomeFirstResponder()                    }else{                                    self.dismissViewControllerAnimated(true, completion: { () -> Void in                                                println("我要确定了,你知道吗?");            })        }    }             //MARK: TFDELEGATE        func textFieldShouldReturn(textField: UITextField) -> Bool {                goBack()                return true    }        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {        self.view.endEditing(true)    }
ここのコードにも注目してください。編集者がイベントに応答するように、キャンセルする追加のクリック ビューもあります。

ここでページを切り替えることができます。実際、Swift 構文と UI 構文は大きく異なります。

3 つ目は、HomeViewController ファイルにコードを記述します。 :


import UIKitprotocol RegisterDelegate{    func registerName(name : NSString)}class HomeViewController: UIViewController,RegisterDelegate {        var nameLbl : UILabel!    var numTF : UITextField!
........  
このプロトコルを実装してから、次のようにプロトコルを実装する必要があることに注意してください:

           func registerName(name: NSString) {        nameLbl.text = name    }    

object-C を知っている友人は、このステップをよく理解する必要があります。委任されたページにプロトコル オブジェクトを実装します。 コードは次のとおりです:


import UIKitclass RegisterViewController: UIViewController,UITextFieldDelegate{    var nameTF : UITextField!    var delegate : RegisterDelegate!    var num : String!        override func viewDidLoad() {        super.viewDidLoad()
.....

ここでのデリゲートに注目してください。端的に言えば、これはホーム ページのオブジェクトです。デリゲートに値を渡し、デリゲートはプロトコルに従います。そのため、デリゲートがプロトコル内のメソッドを呼び出すと、このメソッドの実装プロセスがホーム ページのホームによって実行されます。これにより、登録ページの値を実現できます。効果はホームページに表示されます。これがプロトコルと委任を併用する利点です。これを見て混乱した場合は、とりあえずこの文を読んでください。ホームに戻って、プロキシを設定するコードは次のとおりです。


 func goRegister(){                if numTF.text.isEmpty {                        var alert : UIAlertView = UIAlertView(title: "不能为空", message: "填写你的学号", delegate: nil, cancelButtonTitle: "知道了")            alert.show()            numTF.becomeFirstResponder()                    }else{                        var rootVC :RegisterViewController = RegisterViewController()            rootVC.delegate = self;            rootVC.num = self.numTF.text                        let NVC :UINavigationController = UINavigationController(rootViewController: rootVC)                        self.presentViewController(NVC, animated: true, completion: nil)        }            }

次に、登録ページに戻り、クライアントがプロトコル メソッドを呼び出す場所を確認します。


空でない場合、名前がプロトコル メソッドのパラメータに渡されることに注意してください。そして、表示のためにホームページに移動され、コールバック値渡し関数が実装されます。


前の手順を完了したら、相互に値を転送できるかどうかをテストできます。成功した場合は、AppDelegate.swift でどのように記述したかを簡単に説明します。 . 注意してください。作成後にデフォルトの ViewController.swift を削除しました

4 番目のステップは、Main.storyboard ファイルを純粋なコードに置き換えることです


コードは次のとおりです。 :

   func goBack(){                if nameTF.text.isEmpty {                        var alert : UIAlertView = UIAlertView(title: "不能为空", message: "填写你的名字", delegate: nil, cancelButtonTitle: "知道了")            alert.show()            nameTF.becomeFirstResponder()                    }else{                        self.delegate!.registerName(self.nameTF.text)                        self.dismissViewControllerAnimated(true, completion: { () -> Void in                                                println("我要确定了,你知道吗?");            })        }    }

これは、すべてのコードが純粋なコードで実装されている

5 番目のステップは、表示名を変更することです

Xcode6 には InfoPlist.strings ファイルがないため、同じファイルを作成する必要がありますname、およびキー: バンドル表示名が情報ファイルにないため、これを手動で追加してから、InfoPlist.strings ファイルに Xcode5 と同じコードを記述する必要があります:

"CFBundleDisplayName" = "学号注册";

至此我们就实现了最初设定的全部功能,可以说这也是笔者的一次摸索,如此简单的一个demo却耗费了半天的时间,其中不乏对语法的查阅,功能的查找,确实来之不易,希望给读者带来效率,如需代码,加下面QQ群可索取,实现效果图:


附录:转载本博客,请注明出处,维护版权,人人有责。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。