Skip to content
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.

Fix typos, etc. #20

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ SwiftでのiOSアプリ開発の基礎知識と実務スキルを身に付ける
プロジェクト [day1/1.2](./before/day1/1.2)

3. ビューコントローラ
課題 [1.3.1 UIViewControllerのカスタマイズ(stroyboard)](./pages/day1/1-3-1_UIViewController-customization-storyboard.md)
課題 [1.3.1 UIViewControllerのカスタマイズ(storyboard)](./pages/day1/1-3-1_UIViewController-customization-storyboard.md)
補足 [1.3.2 UIViewControllerのカスタマイズ(xib)](./pages/day1/1-3-2_UIViewController-customization-xib.md)
プロジェクト [day1/1.3](./before/day1/1.3)

Expand Down Expand Up @@ -128,7 +128,7 @@ SwiftでのiOSアプリ開発の基礎知識と実務スキルを身に付ける

3. テキスト
課題 [2.3.1 KeyboardNotification](./pages/day3/2-3-1_KeyboardNotification.md)
参考 [2.3.2 UITextFiled, UITextView](./pages/day3/2-3-2_UITextFiled-UITextView.md)
参考 [2.3.2 UITextField, UITextView](./pages/day3/2-3-2_UITextFiled-UITextView.md)
プロジェクト [day3/2.3](./before/day3/2.3)

3. ローカルキャッシュと通知
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ class ViewController: UIViewController {
default:
return
}
guard let viewContrller = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as? NextViewController else {
guard let viewController = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as? NextViewController else {
return
}
viewContrller.buttonString = buttonString
navigationController?.pushViewController(viewContrller, animated: true)
viewController.buttonString = buttonString
navigationController?.pushViewController(viewController, animated: true)
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ struct GithubUser: GithubEntity {

init?(json: JSON) {
guard
let rawAvatorUrl = json["avatar_url"].string,
let avatarUrl = URL(string: rawAvatorUrl),
let rawAvatarUrl = json["avatar_url"].string,
let avatarUrl = URL(string: rawAvatarUrl),
let login = json["login"].string
else { return nil }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,6 @@ class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

let scrollView = UIScrollView(frame: view.frame)
view.addSubview(scrollView)

let image = UIImage(named:"big_image")!
let scale = UIScreen.main.scale
let size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
let imageView = UIImageView(frame:CGRect(origin: .zero, size: size))

imageView.image = image

scrollView.addSubview(imageView)
scrollView.contentSize = imageView.frame.size
scrollView.maximumZoomScale = 3
scrollView.minimumZoomScale = 0.5
scrollView.delegate = self
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

beforeにafterの内容が入っていました。

}

override func didReceiveMemoryWarning() {
Expand All @@ -42,10 +26,4 @@ class ViewController: UIViewController {
//MARK: - UIScrollViewDelegate
extension ViewController: UIScrollViewDelegate {
// TODO: UIScrollViewDelegateのメソッドを追加
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
for imageView in scrollView.subviews where imageView is UIImageView {
return imageView
}
return nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ struct GithubUser: GithubEntity {

init?(json: JSON) {
guard
let rawAvatorUrl = json["avatar_url"].string,
let avatarUrl = URL(string: rawAvatorUrl),
let rawAvatarUrl = json["avatar_url"].string,
let avatarUrl = URL(string: rawAvatarUrl),
let login = json["login"].string
else { return nil }

Expand Down
10 changes: 5 additions & 5 deletions Swift/pages/day1/1-1_swift-basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ struct Person {

## propertyの値を監視

`wiiSet`や`didSet`を使うことで、propertyの値の変更を監視することができます。
`willSet`や`didSet`を使うことで、propertyの値の変更を監視することができます。

```swift
class Person {
Expand Down Expand Up @@ -508,7 +508,7 @@ enum enum名: 型名 {

```swift
enum Gender: Int {
case man = 0
case male = 0
case female = 1
}

Expand All @@ -519,11 +519,11 @@ Intに限らず、型にStringなど指定できます。

```swift
enum Gender: String {
case man = "man"
case male = "male"
case female = "female"
}

let gender = Gender(rawValue: "man")
let gender = Gender(rawValue: "male")
```

型を指定せずに使うこともできます。
Expand Down Expand Up @@ -948,7 +948,7 @@ print(queryParameter)

```swift
enum Gender: Int {
case man = 0
case male = 0
case female = 1
}

Expand Down
2 changes: 1 addition & 1 deletion Swift/pages/day1/1-2_memory-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ ARC では上記の retain, release はコンパイラが自動で補完して

## 強参照

参照先のオブジェクトのオーナーシップを持っています。自分がそのオブジェクトの参照を無くすまで確実に参照することができます。swif3では変数を宣言するとデフォルトでは強参照として宣言されます
参照先のオブジェクトのオーナーシップを持っています。自分がそのオブジェクトの参照を無くすまで確実に参照することができます。Swift 3では変数を宣言するとデフォルトでは強参照として宣言されます

## 弱参照

Expand Down
6 changes: 3 additions & 3 deletions Swift/pages/day1/1-4-1_ModalViewController-storyboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ storyboardを使いつつ、ただsegueを利用しない、という方法に

では実際に生成して表示します。

生成するには UIStroyboardのインスタンスメソッド [`instantiateInitialViewController()`](https://developer.apple.com/reference/uikit/uistoryboard/1616213-instantiateinitialviewcontroller)を用います。
生成するには UIStoryboardのインスタンスメソッド [`instantiateInitialViewController()`](https://developer.apple.com/reference/uikit/uistoryboard/1616213-instantiateinitialviewcontroller)を用います。
このメソッドの引数に先ほど定義したstoryboardIDを渡します。UIViewControllerがstoryboardから生成された場合、プロパティにstoryboardがあるのでそれを利用します。

ViewControllerからViewControllerを表示するにはメソッド [`present(_:animated:completion:)`](https://developer.apple.com/reference/uikit/uiviewcontroller/1621380-present) を用います。
Expand All @@ -160,7 +160,7 @@ ViewControllerからViewControllerを表示するにはメソッド [`present(_:

## ModalViewControllerを閉じる

ModalViewControllerを表示できたら、次はModalViewControllerを閉じる方法について解説します。
ModalViewControllerを表示できたら、次はModalViewControllerを閉じる方法について解説します。
閉じ方はdelegateパターンを用いる方法とUnwind Segue を使う方法の2パターンがあります。

### delegateパターンを用いて閉じる
Expand Down Expand Up @@ -351,7 +351,7 @@ SecondViewController上に新しくボタンを追加し、そのボタンをタ
* 戻り値の型は `IBAction` 型
* 引数は一つだけで、その型は `UIStoryboardSegue` への参照 (i.e. `UIStoryboardSegue *`型)

これはstoryboardとこのメソッドを紐づけるための制約になります。メソッド名には特に制約はありません。
これはstoryboardとこのメソッドを紐づけるための制約になります。メソッド名には特に制約はありません。
例えば以下のようにメソッドを定義してください。

```swift
Expand Down
6 changes: 3 additions & 3 deletions Swift/pages/day1/1-4-2_ModalViewController-xib.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,13 @@ public enum UIModalPresentationStyle : Int {
```swift
dismiss(animated: true, completion: nil)
```
このメソッドを呼べば、トップレベルの ModalViewController が dismiss されます。公式ドキュメントには原則として呼び出した ViewControlelr が消すべきと書いてあります。状況に応じて使い分けてください。
このメソッドを呼べば、トップレベルの ModalViewController が dismiss されます。公式ドキュメントには原則として呼び出した ViewController が消すべきと書いてあります。状況に応じて使い分けてください。

![dismissViewController](https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/1.5/dismissViewController.png)

## delegate と protocol

ChildViewController で閉じるボタンを押したことを ViewControlelr が知る必要があります。このようにある VC から VC へ何らかの通知を送る手段の一つとして delegate があります。
ChildViewController で閉じるボタンを押したことを ViewController が知る必要があります。このようにある VC から VC へ何らかの通知を送る手段の一つとして delegate があります。

![delegate](https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/1.5/delegate.png)

Expand Down Expand Up @@ -101,7 +101,7 @@ class ChildViewController : UIViewController {

### [1] protocol

プロトコルはメッソド宣言の集合体です。上記では、ChildViewController が ChildViewControllerDelegate というプロトコルで、他のクラスに任せたいメソッドを宣言しています。
プロトコルはメソッド宣言の集合体です。上記では、ChildViewController が ChildViewControllerDelegate というプロトコルで、他のクラスに任せたいメソッドを宣言しています。

### [2] delegate オブジェクト

Expand Down
4 changes: 2 additions & 2 deletions Swift/pages/day1/1-5_UIViewController-lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ override func viewDidLoad() {
インスタンスが生成され、viewが表示されるタイミングでは
[`viewWillAppear(_:)`](https://developer.apple.com/reference/uikit/uiviewcontroller/1621510-viewwillappear)
[`viewDidAppear(_:)`](https://developer.apple.com/reference/uikit/uiviewcontroller/1621423-viewdidappear)が呼ばれます。それぞれ、viewが表示される直前とviewが表示完了した直後に呼ばれます。例えばアニメーションを行ってViewControllerを表示する場合、
[`viewDidAppear(_:)`](https://developer.apple.com/reference/uikit/uiviewcontroller/1621423-viewdidappear)が呼ばれます。それぞれ、viewが表示される直前とviewが表示完了した直後に呼ばれます。例えばアニメーションを行ってViewControllerを表示する場合、

`viewWillAppear(_:)` → 表示アニメーション → `viewDidAppear(_:)` の順に呼び出されます。

Expand Down Expand Up @@ -128,6 +128,6 @@ UIViewController固有のものではなくSwiftのclassで実装できるメソ

```swift
deinit {
print("dealloc");
print("deinit");
}
```
6 changes: 3 additions & 3 deletions Swift/pages/day2/1-1_UINavigationController.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ storyboard上にUINavigationControllerを配置してください。

![](./images/1_1/image2.png)

Initial View Controllerの指定方法は、[day1 1.3.1 UIViewControllerのカスタマイズ(stroyboard)](https://ghe.ca-tools.org/suzuki-taiki/natibootcamp-ios/blob/master/pages/day1/1-3-1_UIViewController-customization-storyboard.md#initial-view-controller%E3%81%AB%E8%A8%AD%E5%AE%9A)で説明しているので割愛します。
Initial View Controllerの指定方法は、[day1 1.3.1 UIViewControllerのカスタマイズ(storyboard)](https://ghe.ca-tools.org/suzuki-taiki/natibootcamp-ios/blob/master/pages/day1/1-3-1_UIViewController-customization-storyboard.md#initial-view-controller%E3%81%AB%E8%A8%AD%E5%AE%9A)で説明しているので割愛します。

##### 2 ViewControllerをNavigationControllerのRoot View Controllerに指定

Expand All @@ -81,10 +81,10 @@ ViewControllerのstoryboard ID はクラス名と同じで、ViewController
```swift
// ViewController.swift
@IBAction func pushButtonTapped(_ sender: UIButton) {
guard let viewControlelr = storyboard?.instantiateViewController(withIdentifier: "ViewController") as? ViewController else {
guard let viewController = storyboard?.instantiateViewController(withIdentifier: "ViewController") as? ViewController else {
return
}
navigationController?.pushViewController(viewControlelr, animated: true)
navigationController?.pushViewController(viewController, animated: true)
}
```

Expand Down
8 changes: 4 additions & 4 deletions Swift/pages/day2/1-2_UITabController.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ AppDelegate.swift
```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if let tabBarContorller = window?.rootViewController as? UITabBarController {
if let tabBarController = window?.rootViewController as? UITabBarController {
let viewControllers: [UIViewController] = [
FirstViewController(imageName: "first"),
FirstViewController(imageName: "second"),
Expand All @@ -58,13 +58,13 @@ func application(_ application: UIApplication, didFinishLaunchingWithOptions lau
FirstViewController(imageName: "fifth"),
FirstViewController(imageName: "sixth")
]
tabBarContorller.viewControllers = viewControllers
tabBarController.viewControllers = viewControllers
}
return true
}
```

画像ファイルは[こちら](./images/day2/1_2/icons)
画像ファイルは[こちら](./images/1_2/icons)

## tab のバッジ
> ![tabBadge](https://raw.github.com/mixi-inc/iOSTraining/master/Doc/Images/2.2/tabBadge.png)
Expand Down Expand Up @@ -106,6 +106,6 @@ Storyboardを用いることで、視覚的にTabBarControllerとその中に入

# 演習
* storyboard上のTabBarControllerに対して、新しくViewController(ThirdViewController)を追加してください。
* xibからロードしたViewContorller(FourthViewController)を更に追加してください。
* xibからロードしたViewController(FourthViewController)を更に追加してください。

解答は [after/day2/1.2/TabSample](../../after/day2/1.2/TabSample) をごらんください
6 changes: 3 additions & 3 deletions Swift/pages/day2/2-1_UIView.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ UIView クラスは大きく分けて以下の役割を持っています。
- アニメーション
- イベント処理 (タップやピンチインなど)

画面上に表示するもの自身としての役割と、階層構造で UIVeiwを管理している、という点をまず抑えてください。
画面上に表示するもの自身としての役割と、階層構造で UIViewを管理している、という点をまず抑えてください。
以下では UIView の利用方法と仕組みについて説明します。

## コンテンツの描画
Expand All @@ -20,8 +20,8 @@ UIView クラスは大きく分けて以下の役割を持っています。

### UIViewをコード上で利用する

UIViewの初期化は、「コード上で行う方法」と storybaord や xib のように 「Interface Builderを利用する方法」とがあります。
今までの章でstorybaord上にパーツを配置していた例がありますが、これが後者の「Interface Builderを利用する方法」にあります。
UIViewの初期化は、「コード上で行う方法」と storyboard や xib のように 「Interface Builderを利用する方法」とがあります。
今までの章でstoryboard上にパーツを配置していた例がありますが、これが後者の「Interface Builderを利用する方法」にあります。

ここでは、コード上からUIViewを利用する方法を解説します。

Expand Down
2 changes: 1 addition & 1 deletion Swift/pages/day2/2-3_UIView-Animation.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ UIView クラスのアニメーションメソッドを使うことで簡単に
> transform | 中心点を基準にビューを拡大縮小、回転、または平行移動する場合は、 このプロパティを変更します。このプロパティを使用する変換は、常に2D空間で実行されます(3D変換を実行するには、Core Animationを使用 してビューのレイヤオブジェクトをアニメーション化する必要があります)。
> alpha | ビューの透明度を徐々に変更する場合は、このプロパティを変更します。
> backgroundColor | ビューの背景色を変更する場合は、このプロパティを変更します。
contentStretch | 利用可能な空間一杯にビューのコンテンツを引き延ばす方法を変更する場合は、このプロパティを変更します。
> contentStretch | 利用可能な空間一杯にビューのコンテンツを引き延ばす方法を変更する場合は、このプロパティを変更します。
>
> [iOS Viewプログラミングガイド](https://developer.apple.com/jp/devcenter/ios/library/documentation/ViewPG_iPhoneOS.pdf)より引用

Expand Down
2 changes: 1 addition & 1 deletion Swift/pages/day2/3-1_UITableView.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Appleのドキュメントによると、以下のような目的で利用する

- datasourceとdelegateの二つのプロトコルを持つ
- datasource : 各行やセクションに埋めるデータを供給する役割を持つ
- deleagte : viewの外観やセルが選択された時にとるアクションを定義する
- delegate : viewの外観やセルが選択された時にとるアクションを定義する
- 各行はセルを用いて描画を行う
- 各行ごとに選択された時に何かしら動作を行う

Expand Down
6 changes: 3 additions & 3 deletions Swift/pages/day2/3-3_UITableViewCell-customization.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ UITableViewCellには、デフォルトでいくつかのオプションがあ
- セルの高さに合わせてcellの高さを変える

この手順に沿って、実装を進めて行きます。
プロジェクトファイルは4.2のものから引き続きで問題ありません。
プロジェクトファイルは3.2のものから引き続きで問題ありません。
(注:TableViewのスタイルはPlainにしておいてください)

今回は以下の画像を使うので、サンプルプロジェクトに追加してください
Expand All @@ -35,11 +35,11 @@ UITableViewCellには、デフォルトでいくつかのオプションがあ
![吹き出し左](./images/3_3/balloon1.png)
![吹き出し右](./images/3_3/balloon2.png)

###カスタムセルのxibの追加
### カスタムセルのxibの追加

- XcodeのNewFileから Cocoa Touch Class を選択し、UITableViewCellのサブクラスとしてクラスを作成します。
クラス名は、CustomCellとしました。
- 次に同じ名前のxibファイルを作ります。NewFileからUserInterface → Empty を選んで、セルのクラス名と同じ名前で保存してください。(サンプルではTVSCustomCellです)
- 次に同じ名前のxibファイルを作ります。NewFileからUserInterface → Empty を選んで、セルのクラス名と同じ名前で保存してください。(サンプルではCustomCellです)
この辺りは、前回のviewをxibから作る、とほぼ同じです。
- Interface builder から TableViewCell をドラッグアンドドロップしてCellを作り、以下のようにカスタマイズしてください。
1. 高さを125pxくらいにする
Expand Down
2 changes: 1 addition & 1 deletion Swift/pages/day2/3-4_UITableView-other-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ UIRefreshControlとは、引っぱり更新やPullToRefreshと呼ばれるアク

### 実際に使ってみる

###### 1. UIRefershControlはUITableViewControllerのプロパティとして利用できるので、UITableViewControllerのサブクラスを一つ作ります。
###### 1. UIRefreshControlはUITableViewControllerのプロパティとして利用できるので、UITableViewControllerのサブクラスを一つ作ります。
- storyboard上のUITableViewControllerとTableViewControllerを紐付けてください
- .swiftファイルのなかで、セクションの数と行の数を適宜修正してください

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

## plist からデータの読み込み

plist は apple が用いているデータの定義で、XML で記述されているファイルです。
plist は Apple が用いているデータの定義で、XML で記述されているファイルです。

![plist](./images/3_5/image2.png)

Expand Down
Loading