Swift2を使用したiOS開発-高度なiOS

この章では、アプリケーションでの複数のビューの作成、ナビゲーションバーの追加、テーブルビューの追加、アプリケーションへのデータの保存、Webアプリケーションの作成などのいくつかの高度な機能について説明します。

この章には、アプリケーションの開発中に必要なもののほとんどが含まれているため、すべてのセクションを注意深く読んでください。

マルチビューコントローラー

以前のアプリケーションでは、単一のビュー/ビューコントローラーのみを提供していました。ただし、アプリケーションには複数のビューを含めることができ、それらのいずれかを個別に実行できます。

したがって、新しいプロジェクトを作成することから始めます。このプロジェクトの名前には複数のビューがあります。他のすべてのプロジェクトと同様に、このプロジェクトにもViewControllerとそのコントローラー用のSwiftファイルがあります。(これは、ビューを選択し、IDインスペクターでそのプロパティを確認することで確認できます。)

次のスクリーンショットは、現在のビューがどのように見えるかを示しています-

右側(IDインスペクター)には、ViewControllerに関連するクラスが表示されます。左側のこの矢印がエントリポイントです。これは、アプリケーションの実行開始後に表示されるアプリケーションの最初のビューです。

2番目のMultipleViewControllerの追加

他のViewControllerをアプリケーションに追加するには、オブジェクトライブラリでViewControllerを検索します。それが見つかったら、ViewControllerを他のビューのすぐ外側にあるmain.stroryboardにドラッグします。

これは、アプリケーションがどのように見えるかです。これで、View Controllerが追加されましたが、新しく追加したViewのViewControllerクラスも作成する必要があります。

Right click on your project → new File → cocoa Touch Class → 好きな名前を付けてください。「SecondViewController」という名前を付けます。

これは、ViewControllerのクラスファイルを作成する方法です。次に、「main.storyboard」に戻り、2番目のView Controllerをクリックして、そのIdentityInspectorを確認します。

現在、クラスフィールドは空である必要があるため、そのフィールドをクリックして、最後の手順で追加したクラス名の入力を開始します。表示されたら、Enterをクリックします。

これで、複数のビューコントローラーを作成し、そのビューのコントローラークラスファイルを追加しました。ただし、アプリケーションを実行すると、2番目のビューはまだ表示されません。どうして?

関数を追加していないので、そのビューに移動します。つまり、アプリケーションにナビゲーションをまだ追加していません。心配しないでください; 次のセクションで説明します。

アプリケーションへのナビゲーションの追加

あるビューから別のビューに移行するプロセスは、 Segueingつまり、2つのビューの間にセグエを作成することによって行われます。これを行うには、最初のView Controllerにボタンを追加し、そこから2番目のビューへのドラッグを制御します。ボタンを離すと、下のスクリーンショットに示すようないくつかのオプションが表示されます。

アクションセグエから[表示]オプションを選択します。アプリケーションを実行すると、ボタンをクリックすると2番目のビューが表示されます(2番目のビューに何かをより明確に追加して識別できるようにするため)。

ただし、最初のビューに戻ることはできません。そのために、私たちは持っていますNavigation controllers

ナビゲーションコントローラーの追加

最初のViewControllerを選択し、トップバーで[ Editor → Embed in → Navigation controller

これで、アプリケーションは次のスクリーンショットのようになります。

ビューの上に小さな薄い灰色の行があることを確認する必要があります。これで、アプリケーションを実行すると、ビューの上にナビゲーションバーがあることがわかります。ボタンをクリックすると、2番目のビューに移動し、ナビゲーションバーに戻るボタンが表示されます。これをクリックすると、初期ビューに戻ります。

ナビゲーションバーにタイトルと戻るボタンを追加する

ナビゲーションバーにタイトルを追加するには、ナビゲーションバーをクリックして、その属性インスペクターを確認します。そこに私達は見るでしょう-

  • Title −中央に表示されるナビゲーションバーのタイトルになります。

  • Prompt −これはタイトルバーの上部中央に表示されます。

  • Back Button −ここで、戻るボタンに表示されるテキストを変更できます。

現在、ビューを通過しているボタンはビュー上にありますが、画面に何か他のものを表示したい場合は適さない可能性があります。したがって、ナビゲーションバーにバーボタンアイテムを追加します。これにより、2番目のビューに移動します。ただし、このためには、最初に追加した最後のボタンを削除する必要があります。

バーボタンアイテムの追加

オブジェクトライブラリでバーボタンアイテムを検索し、ナビゲーションバーの右側にドロップをドラッグします。「次へ>」という名前を付け、そこから2番目のビューへのドラッグを制御し、最後に追加したボタンで行ったように[表示]を選択します。

アプリケーションを実行すると、見た目がすっきりと良くなります。これが、今ナビゲーションで行うすべてです。以降の章では、必要に応じてSwiftコードを使用してナビゲーションバーを変更します。

テーブルビュー

テーブルは、データを複数の行を含む単一の列リストとして表示し、さらにセクションに分割できます。テーブルを使用して、クリーンで効率的な方法でデータを表示する必要があります。

このセクションでは、テーブルビューの追加、プロトタイプセルの追加、テーブルビューのデータソースとデリゲートの追加、テーブルのプロパティの変更、およびテーブルビューセルの動的データの設定の方法について説明します。

テーブルビューの追加

テーブルビューを追加するには、最初に新しいプロジェクトを作成し、「tableView」という名前を付けます。次に、オブジェクトライブラリに移動してテーブルビューを検索すると、テーブルビュー、テーブルビューコントローラー、およびその他の多くのオプションが表示されます。ただし、テーブルビューを選択してドラッグし、デフォルトのビューコントローラに追加する必要があります。

プロトタイプセルの追加

テーブルビューを拡大して、テーブルビューが強調表示されている間に、ビュー全体をカバーするようにします。属性インスペクターを確認してください。現在0であるプロトタイプセルと呼ばれるフィールドがあります。値を1に変更する必要があります。これで、ビューは次のようになります。

セル識別子の変更

次に、ビュー内で、プロトタイプセルをクリックします(これは少し注意が必要です)。したがって、ドキュメントのアウトラインで、[ビューコントローラー]→[表示]→[テーブルビュー]→[テーブルビューセル]をクリックします。属性インスペクターに[識別子]という列があり、それをクリックして「セル」という名前を付けます。上記の手順を理解するには、次のスクリーンショットを参照してください。

デリゲートとデータソースの追加

テーブルビューを動的にするには、動的データをロードする必要があります。したがって、そのためのデリゲートとデータソースが必要です。テーブルのデリゲートとデータソースを作成するには、下のスクリーンショットに示すように、テーブルビューからビューコントローラーまたはビューコントローラーの上部にある黄色のボタンへのドラッグを制御します。

カーソルを離すと、dataSourceとdelegateの2つのオプションが表示され、それらを1つずつ選択します(いずれかのオプションを選択すると、ポップアップが非表示になります。2番目のオプションを追加するには、上記の手順を繰り返す必要があります) 。今では次のようになります-

これが、UI /Main.Storyboardで今行うことのすべてです。次に、「ViewController.swift」ファイルに切り替えます。追加UITableViewDelegate, UITableViewDataSource、以下に示すように、viewController.swiftに-

ただし、Xcodeはこの行にエラーを表示します。

これは、使用する必要のある方法がいくつかあるためです。 UITableView

これらのメソッドを表示するには、コマンドを押しながらUITableViewDataSouceをクリックし、「numberOfRowsInSection」、「cellForRowAtIndex」引数を持つ最初の2つのメソッドをコピーして、viewDidLoad()の前のViewController.swiftに貼り付けます。

この行を削除します @available(iOS 2.0, *)、両方の方法から、開始中括弧と終了中括弧「{}」を追加します。これで、ビューは次のようになります-

Xcodeは両方の機能でエラーを示している必要があります。ただし、これらの関数の戻り値の型を追加していないため、心配する必要はありません。

numberOfRowsInSection−この関数は、セクションに含まれる行数を定義します。したがって、今すぐこの行をメソッドに追加してください。

return 1 //This will return only one row.

cellForRowAt −このメソッドは、すべてのセルのコンテンツを返します。 indexPathすべてのセルのインデックスが含まれています。セルを作成し、そのセルに値を割り当てて、最後にセルを返します。

これで、関数は次のようになります。

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 1; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: 
   UITableViewCellStyle.default, reuseIdentifier: "Cell") 
   cell.textLabel?.text = "First Row" 
   return cell 
}

最初の行では、デフォルトのスタイルでセルを作成しています。 reuseIdentifier 私たちが作ったプロトタイプセルの名前です。

Cell.textLable?.text −これは、そのセルのタイトルとして表示されるテキストを定義します。

最後に、そこからセルを返します。今すぐアプリケーションを実行してみてください。次のようになります-

タイムテーブルアプリケーション

このアプリケーションでは、最後のプロジェクトを続行し、2の表(2…10….20)を印刷するアプリケーションを作成します。

したがって、このアプリケーションを作成するには、プロジェクトのビューコントローラファイルを変更するだけです。

以下のように機能を変更してください。

internal func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
   return 10; 
} 
internal func tableView(_ tableView: UITableView, 
   cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
   let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 
}

次に、アプリケーションを実行します。以下のようになります。

これで、テーブルビューが完成し、アプリケーションが作成されたので、ここで解決するための簡単な課題を示します。

チャレンジ

ユーザーが入力した数値のカウントテーブルを印刷するアプリケーションを作成します。

Hint−入力を取り、ボタンを追加します。ボタンを押すと、その数をカウントしてテーブルが読み込まれます。ここでは、テーブルデータを再読み込みする次の関数も必要になります。

tableView.reloadData()

このアプリケーションに関するすべてのトピックをカバーしたため、これはあなたにとっての課題です。そのため、これに対する解決策は提供しません。

エッグタイマーアプリケーション

このアプリケーションでは、次の概念を使用します。 Timer() そして Class Constructor、時間を管理します。コンセプトとコーディングを提供します。前の章ですべてのUI要素について何度も説明したので、UIを自分で作成する必要があります。(ただし、まったく新しいように見えるすべてのヒントを提供します)。

最終的なアプリのレイアウトは次のようになります-

このアプリケーションでは何が起こりますか?

  • タイトルラベルの開始値は210です。

  • 再生ボタンをクリックすると、値は1秒ごとに1つずつ減少します。

  • 一時停止をクリックすると、値はそこでのみ停止するはずです。

  • -10をクリックすると、値が10減少し、デクリメントが続行されます。

  • +10をクリックすると、値が10増加し、デクリメントが続行されます。

  • [リセット]をクリックすると、値は210になります。

  • 値が0を下回ってはなりません。

概念

  • クラスTimer()→var timer = Timer()の変数を使用します。

  • 作成したばかりのこのタイマー変数に値を設定します。

    • timer = Timer.scheduledTimer(timeInterval:1、target:self、selector:#selector(ViewController.processTimer)、userInfo:nil、repeats:true)

    • timeInterval->は、使用する時間間隔です。

    • ターゲット->は、実行する必要のあるビューコントローラです。

    • セレクター->は、このタイマーを使用する関数名です。

    • userInfo-> nullと繰り返し、はい、繰り返したいので、trueになります。

タイマーを無効にする

プログラミングでタイマーを停止するには、次を追加します timer.invalidate() 関数。

Elements we have used

Navigation bar −ナビゲーションバーに3つの項目を追加しました。

  • バーボタンアイテム、左側に1つ、右側に1つ。
  • タイトルは「OurEggTimer」。

Toolbar −ツールバーはアプリ画面の下部に表示され、現在のビューまたはその中のコンテンツに関連するアクションを実行するためのボタンが含まれています。

ツールバーは半透明で、背景の色合いがある場合があります。人々がそれらを必要としそうにないとき、彼らはしばしば隠れます。

UIの下部に5つの項目があるツールバーを追加しました。

  • -10、リセット、+ 10という名前の3つのバーボタンアイテム。
  • 2つの柔軟なスペース:バーボタンアイテム間の柔軟なスペース-

バーボタンアイテムにアイコンを追加するにはどうすればよいですか?

バーボタンアイテムを選択します。バーボタンアイテムをクリックし、属性インスペクターに移動し、[アイテムの選択]をクリックして、表示されるドロップダウンからアイテムを選択します。

同様に、他のすべてのボタンのアイテムを選択し、上記のようにUIを作成します。ビューの中央にラベルを追加し、アウトレットとして接続し、「-」という名前を付けます。timeLeftLabel

スタートタイマーのアクション

以下はスタートタイマーのプログラムです。

@IBAction func startTimerButton(_ sender: Any) { 
   if !timerActive { 
      timerActive = true 
      eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
      #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
   } 
}

次の関数を作成します-

func stopTimer() { 
   timerActive = false 
   eggTimer.invalidate() 
}

停止機能のアクション

以下は停止機能のプログラムです。

@IBAction func pauseTimerButton(_ sender: Any) { 
   stopTimer() 
}

時間を引くためのアクション

以下は時間を引くためのプログラムです。

@IBAction func subtractTime(_ sender: Any) { 
   if timeLeft > 10 { 
      timeLeft = timeLeft - 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
}

時間をリセットするためのアクション

以下は、時間をリセットするためのプログラムです。

@IBAction func resetTimer(_ sender: Any) { 
   timeLeft = 210 
   timeLeftLabel.text = String(timeLeft) 
}

addTimeのアクション

以下は時間を追加するためのプログラムです。

@IBAction func addTime(_ sender: Any) { 
   timeLeft = timeLeft + 10 
   timeLeftLabel.text = String(timeLeft) 
}

これで、viewController.swiftは次のようになります。

import UIKit 
class ViewController: UIViewController { 
   @IBOutlet weak var timeLeftLabel: UILabel! 
   var eggTimer = Timer()  // Initialize the Timer class. 
   var timerActive = false // Prevents multiple timers from firing. 
   var timeLeft = 210  
   func stopTimer() { 
      timerActive = false 
      eggTimer.invalidate() 
   } 
     
   func processTimer() { 
      if timeLeft <= 0 { 
         stopTimer() 
         return 
      }     
      timeLeft = timeLeft - 1; 
      timeLeftLabel.text = String(timeLeft) 
   } 
    
   @IBAction func startTimerButton(_ sender: Any) { 
      if !timerActive {
         timerActive = true 
         eggTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: 
         #selector(ViewController.processTimer), userInfo: nil, repeats: true) 
      } 
   } 
     
   @IBAction func pauseTimerButton(_ sender: Any) { 
      stopTimer() 
   } 
    
   @IBAction func subtractTime(_ sender: Any) { 
      if timeLeft > 10 { 
         timeLeft = timeLeft - 10 
         timeLeftLabel.text = String(timeLeft) 
      } 
   } 
     
   @IBAction func resetTimer(_ sender: Any) { 
      timeLeft = 210 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   @IBAction func addTime(_ sender: Any) { 
      timeLeft = timeLeft + 10 
      timeLeftLabel.text = String(timeLeft) 
   } 
     
   override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
   }  
   override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated
   } 
}

これがアプリケーションで行うすべてのことです。アプリケーションを実行してみてください。正常に実行されるはずです。

ローカルストレージへのデータの保存

ローカルストレージにデータを保存するということは、ローカルデバイスのストレージを使用して、デバイス上のアプリケーションに関連するデータを保存することを意味します。ローカルストレージにデータを保存する方法は2つあります。NSUserDefault そして CoreData

それらを詳しく理解しましょう。

NSUserDefaults

NSUserDefaultsは、設定、設定、個々の値などの小さなデータを保存することを目的としています。アプリケーションでUserDefaultsを使用するには、以下に示すように、コードを介してnsuserDefaultsへの参照を作成する必要があります。

let defaultValues = NSUserDefaults.standardUserDefaults()

UserDefaultsのデータに値を設定するには、次のコードを使用できます-

defaultValues.setObject("Simplified iOS", forKey: "nameKey")  
func setDouble(value: Double, forKey defaultName: String) 
func setBool(value: Bool, forKey defaultName: String) 
func setObject(value: AnyObject?, forKey defaultName: String) 
func setURL(url: NSURL?, forKey defaultName: String) 
func setInteger(value: Int, forKey defaultName: String) 
func setFloat(value: Float, forKey defaultName: String)

NSUserDefaultsから値を取得するには、次のコードを使用できます。

func boolForKey(defaultName: String) -> Bool 
func integerForKey(defaultName: String) -> Int 
func floatForKey(defaultName: String) -> Float 
func doubleForKey(defaultName: String) -> Double 
func objectForKey(defaultName: String) -> AnyObject? 
func URLForKey(defaultName: String) -> NSURL?

CoreData

CoreDataは永続的なフレームワークであり、大規模なデータトランザクションをサポートします。CoreDataを使用すると、ユーザーデータを格納するためのリレーショナルエンティティ属性モデルを構築できます。CoreDataはフレームワークであり、SQLiteのバイナリ形式を使用してデータを保存できます。

アプリケーションでCoreDataを使用するには、新しいプロジェクトから開始し、プロジェクトの作成時に[コアデータを使用する]をオンにします。

Login Using core Data −新しいプロジェクトを作成し、次のスクリーンショットに示すように[UseCoreData]を選択します。

プロジェクトが開くまで続けます。これで、プロジェクトに以前のプロジェクトよりも多くのファイルがあることがわかります。

このファイル CoreData_demo.xcdatamodeld は、ユーザーテーブルを作成してデータを格納するデータベースです。

Concept − CoreDataについては、アプリを閉じて数か月後に開いても、保存したデータが保持され、次のアプリケーションで表示されます。

次に、コアデータを追加してコアデータを取得する方法を説明します。

Adding Core Data− CoreDataを追加するには、ファイルCoreData_demo.xcdatamodeldをクリックすると、エンティティが空であることがわかります。[エンティティの追加]ボタンをクリックすると、エンティティが追加されます。エンティティ名をダブルクリックして、好きな名前に変更します。

次にエンティティをクリックすると、属性フィールドが空であることがわかります。プラス記号をクリックして、エンティティの名前を変更します。次のフィールドからエンティティのタイプを選択します。

エンティティと1つの属性を追加しました。さて、AppDelegate.swift、CoreDataを選択したため、2つの新しい関数が追加されたことがわかります。追加された2つの関数は次のとおりです。

Note −続行する前にファイルにCoreDataをインポートします。

Saving data to Core Data − CoreDataに一部のデータを保存するには、AppDelegateクラスのオブジェクトを作成する必要があります。

let appDelegate = UIApplication.shared.delegate as! AppDelegate

そして、コンテキストオブジェクト

let context = appDelegate.persistentContainer.viewContext

次に、エンティティを呼び出すエンティティオブジェクトを作成する必要があります-

let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context)

次に、作成した属性の値を設定します。

newValue.setValue(textField.text, forKey: "name")

を使用してデータを保存します

context.save();

Fetching from core data−フェッチ中、上記の2つのステップ(appDelegateとcontextの作成)は同じになります。次に、フェッチ要求を作成します。

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")

結果を保存するオブジェクトを作成します。

let results = try context.fetch(request)

次に、要件に従って結果を確認します。次に作成するアプリケーションで、CoreDataの詳細を確認します。

Challenge−ユーザーが名前を入力し、ログインをクリックしてアプリケーションを閉じるアプリケーションの作成を試みます。次回ユーザーがアプリケーションを開いたときも、ログインしている必要があります。次に、[ログアウト]ボタンを追加します。ユーザーがそれをクリックすると、アプリケーションはユーザー名を再度要求します。

CoreDataを使用したログイン/ログアウト

「ログイン」と呼ばれる単一のビュープロジェクトを作成し、CoreDataの使用を選択します。CoreData_demo.xcdatamodeldをクリックして、「Users」というエンティティを追加します。その中に、「name」という属性を追加します。

main.storyboardに移動し、テキストフィールドとログインボタンを追加します。その下にラベルを追加し、ダブルクリックしてコンテンツを削除します。次に、ログアウトボタンを追加し、その属性インスペクターに移動して、「alpha」を0に等しくします。これで、ビューは次のようになります。

次に、View Controllerファイルに移動し、アシスタントエディターを開いて、UI要素とコントローラーファイル間の接続を作成します。

Note−ボタンの外観を変更する必要があるため、両方のボタンのアウトレットも作成します。例-ユーザーがログインしている場合はログインボタンを非表示にし、ユーザーがログインしていない場合はログインを表示してログアウトボタンを非表示にします。

CoreDataからのデータの追加とフェッチについてはすでに説明したので、ここにコードを配置します。

Try-Catch−コードでtry-catchブロックを何度も使用していることに気付くでしょう。これは、try-catchブロックを使用せず、プログラムに例外またはエラーがある場合、実行が停止するためです。一方、try catchブロックを使用していて、何らかのエラーが発生した場合は、catchブロックがエラーを処理します。詳細については、Swiftチュートリアルをご覧ください。

ログイン/ログアウトアプリケーションのコード

ログイン/ログアウトアプリケーションに使用されるさまざまなコンポーネントとコードを理解しましょう。

Login Button Action −次のコードは、ログインボタンアクションを追加する方法を説明しています。

var isLoggedIn = false 
@IBAction func logIn(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate
   let context = appDelegate.persistentContainer.viewContext 
   if isLoggedIn { 
      let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
      do { 
         let results = try context.fetch(request) 
         if results.count > 0 { 
            for result in results as! [NSManagedObject] { 
               result.setValue(textField.text, forKey: "name") 
               do { 
                  try context.save() 
               } 
               catch { 
                  print("Update username failed") 
               } 
            } 
            label.text = "Hi " + textField.text! + "!" 
         } 
      } 
      catch { 
         print("Update failed") 
      } 
   } else { 
      let newValue = NSEntityDescription.insertNewObject(forEntityName: "Users", into: context) 
      newValue.setValue(textField.text, forKey: "name") 
      do { 
         try context.save() 
         logInButton.setTitle("Update username", for: []) 
         label.alpha = 1 
         label.text = "Hi " + textField.text! + "!" 
         isLoggedIn = true 
         logOutButton.alpha = 1 
      }  
      catch { 
         print("Failed to save") 
      }     
   } 
}

Logout Button Action −次のコードは、ログアウトボタンアクションを追加する方法を説明しています。

@IBAction func logOut(_ sender: AnyObject) { 
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   do { 
      let results = try context.fetch(request) 
      if results.count > 0 { 
         for result in results as! [NSManagedObject] { 
            context.delete(result) 
            do { 
               try context.save() 
            } catch { 
               print("Individual delete failed") 
            } 
         } 
         label.alpha = 0 
         logOutButton.alpha = 0 
         logInButton.setTitle("Login", for: []) 
         isLoggedIn = false 
         textField.alpha = 1 
      } 
   } catch { 
      print("Delete failed") 
   } 
}

ViewDidLoad() −次のコードは、ViewDidLoad()関数の使用方法を説明しています。

override func viewDidLoad() { 
   super.viewDidLoad() 
   // Do any additional setup after loading the view, typically from a nib.
   let appDelegate = UIApplication.shared.delegate as! AppDelegate 
   let context = appDelegate.persistentContainer.viewContext 
   let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users") 
   request.returnsObjectsAsFaults = false 
   do { 
      let results = try context.fetch(request) 
      for result in results as! [NSManagedObject] { 
         if let username = result.value(forKey: "name") as? String { 
            logInButton.setTitle("Update username", for: []) 
            logOutButton.alpha = 1 
            label.alpha = 1 
            label.text = "Hi there " + username + "!" 
         }     
      } 
             
   } catch { 
      print("Request failed") 
   } 
}

両方のボタンに対して、アウトレットとアクションを作成する必要があったことを忘れないでください。

次に、アプリケーションを保存して実行します。ログインし、アプリケーションを閉じて、再度実行します。次のようになります。

CoreDataで行うのはこれだけです。同じ概念を使用して、多くのCoreDataアプリケーションを構築できます。

キーボードの制御

このセクションでは、キーボードの動作を制御する方法を学びます。例–テキストを入力した後、テキストフィールドの外側をクリックしても、キーボードは閉じません。ここでは、キーボードの制御方法を理解します。

入力フィールドの外側をクリックするとキーボードが消えるはずです

これは簡単な作業です。これを行うには、中括弧を閉じる前に、次のコードをviewControllerファイルに貼り付けるだけです。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
   self.view.endEditing(true)  
}

これにより、入力フィールドの外側をクリックするとキーボードが消えます。

キーボードはリターンキーをタップすると消えるはずです

キーボードを非表示にするには、ビューコントローラに新しいタイプを追加する必要があります。また、テキストフィールドを追加し、textFieldというアウトレットを作成します。最後に、UITextFieldDelegate

私たちも control + drag 入力フィールドからViewControllerに移動し、表示されるオプションからデリゲートを選択します。

次に、以下の関数を追加します。

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
   textField.resignFirstResponder()  
   return true 
}

最終的なViewControllerファイルは次のようになります-

import UIKit 
class ViewController: UIViewController, UITextFieldDelegate { 
   override func viewDidLoad() { 
      super.viewDidLoad() 
      // Do any additional setup after loading the view, typically from a nib. 
   }  
   override func didReceiveMemoryWarning() { 
      super.didReceiveMemoryWarning() 
      // Dispose of any resources that can be recreated. 
   } 
   override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
      self.view.endEditing(true) 
   }
   func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
      textField.resignFirstResponder() 
      return true 
   } 
}

Webコンテンツのダウンロード-Facebook / Googleを開く

このセクションでは、各ボタンを押すとFacebookとGoogleを開くアプリケーションの作成について学習します。また、Webビューとアプリトランスポート層セキュリティの概念についても学習します。この後、あなたはあなた自身のブラウザを作ることができるでしょう。

Note −このアプリケーションにはインターネット接続が必要です。

Webアプリケーションの作成

新しいシングルビューアプリケーション、iOSプロジェクトを作成します。オブジェクトライブラリの検索バーで、Webビューを検索してドラッグし、main.StoryboardのViewコントローラーに追加します。

Webビューを追加した後、それを隅々まで伸ばします。アプリケーションUIは次のようになります-

アシスタントエディターをクリックして、main.storyboardとビューコントローラーを開きます。webViewのアウトレットと、両方のボタンのアクションを作成します。ロード時に、アプリケーションはwebViewにyahooをロードします。グーグルをクリックすると、グーグルがロードされ、フェイスブックボタンをクリックすると、フェイスブックページがロードされます。

最終的なビューは次のようになります-

次のスクリーンショットは、アプリケーションのさまざまな画面がどのように表示されるかを示しています。https以外のWebサービスを開こうとすると、エラーが表示され、App Transport LayerSecurity例外を追加する必要があります。info.plist ファイル。