Slide 1

Slide 1 text

.VMUJQMFMBZPVUXJUI 6*5BCMF7JFX$FMM @yashigani ؔϞό #8

Slide 2

Slide 2 text

yashigani id:yashigani_w @yashigani Mobile Application Engineer http://yashigani.hatenablog.com Hatena

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

͋Δ೔ͷͰ͖͝ͱ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ඍົʹҧ͏ʜ

Slide 8

Slide 8 text

͍͔ʹͯ͠ෳ਺ͷ
 ϨΠΞ΢τΛ࣮ݱ͢Δ͔

Slide 9

Slide 9 text

• ίʔυͰϨΠΞ΢τΛ͍͡Δ • xibΛෳ਺༻ҙͯ͠࢖͍෼͚Δ

Slide 10

Slide 10 text

ίʔυͰ͍͡Δ࡞ઓ

Slide 11

Slide 11 text

• Pros • ΍Δ͜ͱࣗମ͸୯७ • Cons • ফ͑ΔView໰୊ • Auto Layoutͷઃఆ͕೉͍͠ • ϨΠΞ΢τͷશ༰Λ௫Έʹ͍͘

Slide 12

Slide 12 text

ෳ਺ͷYJCΛ࢖͏࡞ઓ

Slide 13

Slide 13 text

• Pros • NSLayoutConstraintΛϓϩύςΟʹ͠ͳͯ͘Α͍ • Auto LayoutͷࢦఆΛ୯७ʹͰ͖Δ • viewࣗମͷϓϩύςΟΛ࢖͍෼͚Ͱ͖Δ • Cons • ෳ਺ͷxibΛϝϯςφϯε͢Δඞཁ͕͋Δ • ܾΊࣄ͕૿͑Δ(࢖͍ճ͠ʹ͘͞)

Slide 14

Slide 14 text

࣮૷ύλʔϯ

Slide 15

Slide 15 text

class EntryCell: UITableViewCell { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var thumbnailView:UIImageView? var entry: Entry! }

Slide 16

Slide 16 text

protocol EntryCellRepresentable { var tableView: UITableView! { get } func registerEntryCell() func dequeueEntryCell(entry: Entry, forIndexPath indexPath: NSIndexPath) -> EntryCell }

Slide 17

Slide 17 text

extension EntryCellRepresentable { func registerEntryCell() { let ids = ["EntryCell", "EntryCellWithImage"] ids.forEach { let nib = UINib(nibName: $0, bundle: nil) tableView.registerNib(nib, forCellReuseIdentifier: $0) } } func dequeueEntryCell(entry: Entry, forIndexPath
 indexPath: NSIndexPath) -> EntryCell { let id = entry.hasImage ? "EntryCellWithImage" : "EntryCell" let cell =
 tableView.dequeueReusableCellWithIdentifier(id,
 forIndexPath: indexPath) as! EntryCell cell.entry = entry return cell } }

Slide 18

Slide 18 text

·ͱΊ

Slide 19

Slide 19 text

• xibΛ෼͚ΔͱAuto LayoutҎ֎΋࢖͍෼͚Ͱ͖Δ • OptionalΛ্खʹ࢖͓͏ • protocol extension࠷ߴ • UIStackViewૣ͘࢖ΘͤΖ

Slide 20

Slide 20 text

͋Γ͕ͱ͏͍͟͝·ͨ͠