13 Jun 2018
|
swift
extension
override
@objc
superํด๋์ค์์ extension์ผ๋ก ํจ์๋ฅผ ์ถ๊ฐํ๊ณ subํด๋์ค์์ override ํ๊ณ ์ถ์๋ @objc
ํค์๋๋ฅผ ๋ถ์ฌ์ผํ๋ค.
๋ฐ๊ฒฌ
UIView extension์์ ์๋ก์ด ํจ์๋ฅผ ์ ์ธํ๊ณ ๋ค๋ฅธ ์ปค์คํ
๋ทฐ(UIViewํ์
)์์ ํด๋น ํจ์ ๋ด๋ถ๋ฅผ ์ข ๋ค๋ฅด๊ฒ ์ฐ๊ณ ์ถ์ด์ override
๋ฅผ ์ ์ธํ๋๊น, Overriding non-@objc declarations from extensions is not supported
๋ผ๋ ์๋ฌ ๋ฐ๊ฒฌ.
ํด๊ฒฐ
๊ทธ๋ผ @objc
๋ถ์ด๋ฉด ํด๊ฒฐ!
class MySuperClass {
}
extension MySuperClass {
@objc func otherNumber() -> Int {
return 1
}
}
class MySubclass : MySuperClass {
@objc override func otherNumber() -> Int {
return 2
}
}
var sup = MySuperClass()
var sub = MySubclass()
print(sup.otherNumber()) // 1
print(sub.otherNumber()) // 2
(๊ณ ๋ฏผ)
- ์ฒ์์ ์ด ๋ฐฉ๋ฒ์ ์ฐ๋ ค๊ณ ํ๋๊ฑด ์ปค์คํ
๋ทฐ ํด๋์ค์์๋ ๋น์ทํ ๋์์ ํด์ผํ์ง๋ง, UIViewํด๋์ค์ ์ ์ธํด๋์ ๊ฒ ์ฒ๋ผ ์์ ํ ๊ฐ๊ฒ ๋์ํ ์๋ ์์ด์์์
- ๋น์ทํ ๋์์ด๊ณ , ๊ฐ์ ํด๋์คํ์
์ด๋๊น ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ด์ overrideํ๋ ๊ฒ์ธ๋ฐ,
- ์ ์ด์ ํด๋น ํ์
์๋ค๊ฐ ํ์ํ ํจ์๋ฅผ extension์ผ๋ก ๊ตฌํํด๋๊ณ ๊ทธ ํจ์๋ฅผ ๋
override
ํด์ ๋ณ๊ฒฝํ๊ณ ์ฌ์ฉํ๋๊ฒ ํฉ๋ฆฌ์ ์ธ๊ฑธ๊น?
10 Jun 2018
|
iOS
UITableView
ํ
์ด๋ธ๋ทฐ
์๋ฌธ์๋ฃ - Table View Programming Guide for iOS ๋ฅผ ๋ฒ์ญ, ์ ๋ฆฌํ์ต๋๋ค. ์์ต์ฉ์ผ๋ก ์ ๋ฆฌํ ์๋ฃ์ด๋ ๊ฐ๋ณ๊ฒ ์ฐธ๊ณ ๋งํด์ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ๊ณ , ํ๋ฆฐ ์ ์ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! :)
ํ
์ด๋ธ๋ทฐ API
Table View - ํ
์ด๋ธ๋ทฐ
- TableView๋ UITableViewClass์ ์ธ์คํด์ค์ด๋ค.
- UITableViewClass์ ๋ฉ์๋๋ฅผ ํตํด ํ
์ด๋ธ๋ทฐ์ ์ธ๊ด(appearance)์ ์ค์ ํ ์ ์๋ค.
- (for example, specifying the default height of rows or providing a subview used as the header for the table)
- ๋ ๋ค๋ฅธ ๋ฉ์๋๋ก๋ ํ์ฌ ์ ํ๋ ์ด(row), ํน์ ํ ์ด์ด๋ ์
์ ์ ๊ทผํ ์ ์๋ค.
- ๋ฉ์๋๋ก๋ ์ ํ๋ ์
์ ๊ด๋ฆฌํ๊ณ , ๋ทฐ๋ฅผ ์คํฌ๋กคํ๊ฑฐ๋, ์ด์ด๋ ์น์
์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ค.
- UITableView๋ UIScrollView๋ฅผ ์์๋ฐ์ ์คํฌ๋กค๋ง์ ๊ตฌํํ๋๋ฐ, ํ
์ด๋ธ๋ทฐ๋ ํน๋ณํ๊ฒ ์์ง์ ์คํฌ๋กค๋ง(vertical scrolling)๋ง ํ์ฉ๋๋ค.
Table View Controller - ํ
์ด๋ธ๋ทฐ ์ปจํธ๋กค๋ฌ
The UITableViewController class manages a table view and adds support for many standard table
- UITableViewController ํด๋์ค๋ ํ
์ด๋ธ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋์์ ํ๋ค. ์ ํ ๊ด๋ฆฌ(selection management), ์ด ์์ , ํ
์ด๋ธ ์ค์ ๋ฑ์ ๋์๋ค๊ณผ ๊ด๋ จํด์ ํ
์ด๋ธ๋ทฐ๋ฅผ ์ํฌํธํ๋ค.
- ํ
์ด๋ธ๋ทฐ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ ์๊ณ , UITableViewController๋ฅผ ์์๋ฐ์์ ์ปค์คํ
ํด๋์ค๋ฅผ ๊ตฌํํ๋ค.
Data Source and Delegate - ๋ฐ์ดํฐ์์ค์ ๋ธ๋ฆฌ๊ฒ์ดํธ
- ํ
์ด๋ธ๋ทฐ๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด์๋ Data Source and Delegate๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผํ๋ค.
- MVCํจํด์ ๋ฐ๋ผ, data source๋ ์ฑ์ model๊ณผ table view์ ์ค๊ฐ์ ์ญํ ์ ํ๋ค.
- Delegate๋ ํ
์ด๋ธ๋ทฐ์ ๋์๊ณผ ์ถํ(appearance)์ ๋ด๋นํ๋ค. view๊ฐ ๋ณ๊ฒฝ๋๋ ์ฌํญ์ ๋ธ๋ฆฌ๊ฒ์ดํธ๊ฐ ๋ด๋นํ๊ณ , ๋ทฐ๋ ๊ทธ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ์์กดํ์ฌ ๋ทฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค.
- Data source์ Delegate๋ ๊ฐ์ ๊ฐ์ฒด์ผ์ ์๊ณ ,(ํ ํด๋์ค์์ ๊ตฌํํ ์๋ ์๊ณ ) ๊ทธ ํด๋์ค๋ UITableViewController๋ฅผ ์์๋ฐ๋๋ค.
- Data source๋ UITableViewDataSourceํ๋กํ ์ฝ์ ๋ฐ๋ฅธ๋ค.
- Delegate๋ UITableViewDelegateํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ฉฐ, required๋ฉ์๋๋ ์๊ณ optional๋ฉ์๋๋ฅผ ํ์์ ๋ฐ๋ผ ๊ตฌํํ๋ฉด ๋๋ค.
IndexPath Class
- Swift์์๋ NSIndexPath ๋์ IndexPath๋ฅผ ์ฌ์ฉ.
- ํ
์ด๋ธ๋ทฐ์ ๋ฉ์๋๋ค์ Indexpath๋ฅผ ํ๋ผ๋ฏธํฐ๋ ๋ฆฌํด๋ฐธ๋ฅ๋ก ์ฌ์ฉํ๋ค.
- ์
์ index path๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌํ ๋ ์ฌ์ฉํ๋ค.
- index path๋ ์ค์ฒฉ๋ ์ด๋ ์ด(์ด์ค๋ฐฐ์ด, nested array)์ ํน์ ํ ๋
ธ๋๋ก ๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๊ณ (identify), foundationํ๋ ์์ํฌ ๋ด์์๋ NSIndexPathํด๋์ค์ด๋ค.
- IndexPath์ section๊ณผ row: ํ๋ ฌํํ๋ก ์ดํดํ๊ณ ๋ณด๋ฉด ์ฌ์
- section: ์
์ด ์์นํด์ผํ ์น์
. (The section in the table that the cell is going to be placed into.)
- row: ์น์
๋ด์์์ ์
์ ์์น(์์) (The row (in the section) that the cell will be placed into.)
- ์ฐธ๊ณ ๋งํฌ - Stackoverflow
Table View Cells - ํ
์ด๋ธ๋ทฐ ์
- ์
์ UITableViewCellํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
- UITableViewCellํด๋์ค๋ ์
์ ํ๊ณผ ํธ์ง, ์
์ธ์๋ฆฌ ๋ทฐ ๊ด๋ฆฌ, ์
์ค์ (configuration) ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
- predefined style์ ์ด์ฉํด์ ๋ฏธ๋ฆฌ ์ ์๋ ์คํ์ผ๋ก ์
์ ์ค์ ํ ์ ์์
- ์ด๋ฏธ ๊ธฐ์กด์ ์๋ ์
(โoff-the-shelfโ cell object)์ ์ปค์คํ
์๋ธ๋ทฐ๋ฅผ ์ฌ๋ ค์ ๊ตฌํํ ์๋ ์๋ค.
- UITableViewCellํด๋์ค๋ฅผ ์์๋ฐ์ ์ปค์คํ
๋ทฐ๋ฅผ ๋ง๋ค์ด์ ์
์ ์ธ๊ด(appearance)์ด๋ ๋์์ ๋ง๋ค ์๋ ์๋ค.
- ํ
์ด๋ธ๋ทฐ ์
์ ๋ํ ๋ ์์ธํ ๋ด์ฉ - A Closer Look at Table View Cells
03 Jun 2018
|
iOS
UITableView
ํ
์ด๋ธ๋ทฐ
์๋ฌธ์๋ฃ - Table View Programming Guide for iOS ๋ฅผ ๋ฒ์ญ, ์ ๋ฆฌํ์ต๋๋ค. ์์ต์ฉ์ผ๋ก ์ ๋ฆฌํ ์๋ฃ์ด๋ ๊ฐ๋ณ๊ฒ ์ฐธ๊ณ ๋งํด์ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ๊ณ , ํ๋ฆฐ ์ ์ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! :)
ํ
์ด๋ธ๋ทฐ์ ์
์คํ์ผ ๊ธฐ๋ณธ
ํ
์ด๋ธ๋ทฐ ์์ฑ
- ์คํ ๋ฆฌ๋ณด๋์์ UITableViewController ์ถ๊ฐํ์ฌ ์ด์ฉ
- ์ฝ๋๋ก๋ ์ปค์คํ
ํด๋์ค์ UITableViewDataSource์ UITableViewDelegate ํ๋กํ ์ฝ ๊ตฌํํ์ฌ ํ
์ด๋ธ๋ทฐ์ปจํธ๋กค๋ฌ๋ก ์ด์ฉ
- ์ปค์คํ
ํด๋์ค๋ฅผ ๋ฐ๋ก ํ๋กํ ์ฝ์ ๊ตฌํํ์ง์๊ณ ํ๋ก์ ํธ ๋ด์ ํ์ผ ์ถ๊ฐ์ Cocoa Touch Class๋ฅผ ์ ํํ์ฌ UITableViewController๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- ์ฐธ๊ณ :
class UITableViewController : UIViewController, UITableViewDelegate, UITableViewDataSource
Static Cells / Dynamic Prototypes
ํ
์ด๋ธ๋ทฐ์ ํน์ฑ์ ๋์ ํ๋กํ ํ์
/ ์ ์ ์
์ด ์๋ค. ์๋ก์ด ํ
์ด๋ธ๋ทฐ๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ณธ ์ค์ ๊ฐ์ ๋์ ํ๋กํ ํ์
์ด๋ค.
- Dynamic Prototypes (๋์ ํ๋กํ ํ์
)
- ํ(์
)์ ๊ฐ์๊ฐ ๊ณ ์ ๋์ด์์ง ์๋ ํ
์ด๋ธ๋ทฐ์ ์ฌ์ฉ.
- ์ฑ์ด ์คํ๋๋ ๋์ค ์ํ๊ฐ ๋ฐ๋๋ฉด (ex. ์ฌ์ฉ์๊ฐ ๋ชฉ๋ก์์ ํญ๋ชฉ์ ์ญ์ ํ๊ฑฐ๋ ์ถ๊ฐํ๋ ํ๋์ ํ ๋) ์
์ ๊ฐ์๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ค.
- UITableViewDataSource ์ธ์คํด์ค์ ์ํด ์ฝํ
์ธ ๋ฅผ ๊ด๋ฆฌ
- ์
ํ๋๋ฅผ ๋์์ธํด ์ด๋ฅผ ๋ค๋ฅธ ์
์ ํ
ํ๋ฆฟ์ผ๋ก ์ฌ์ฉ
- Static Cells (์ ์ ์
)
- ๋ง๊ทธ๋๋ก ์ ์ . ๊ณ ์ ๋ ๋ ์ด์์๊ณผ ํ(์
)์ ์๋ฅผ๋ฅผ ๊ฐ์ง๋ ํ
์ด๋ธ๋ทฐ์ ์ฌ์ฉํ๋ค.
- ํ
์ด๋ธ๋ทฐ๋ฅผ ๋ง๋๋ ์์ ์ ํ
์ด๋ธ์ ํํ์ ์
์ ์๊ฐ ์ ํด์ ธ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ์ฑ์ด ์คํ๋๋ฉด์ ์ํ๊ฐ ๋ฐ๋๋ค๊ณ ํด์ ํ
์ด๋ธ๋ทฐ์ ์
์ ์๊ฐ ๋ณํ๋๊ฑฐ๋ ํ์ง ์๋๋ค.
ํ
์ด๋ธ๋ทฐ ์คํ์ผ
- plain
- ํ๋ ์ด์์ ์น์
์ ๊ฐ์ง ์ ์์
- ์น์
๋ํ ํ๋ ์ด์์ ์ด(row)์ ๊ฐ์ง ์ ์๊ณ , ๊ฐ ์น์
์ header์ footer๋ฅผ ๊ฐ์ง ์ ์์
- (ํค๋์ ์น์
์ ์ด๋ฏธ์ง๋ฅผ ๋ฃ๊ณ ์ถ์ผ๋ฉด ์ปค์คํ
๋ทฐ๋ฅผ ๊ฐ์ง๊ฒ ํ ์๋ ์๋ค.)
- indexed list : ์ฃผ์๋ก์ฒ๋ผ ์ธ๋ฑ์ค๊ฐ ์น์
์ ํค๋ ํ์ดํ์ด๊ณ ์ค๋ฅธ์ชฝ ์คํฌ๋กค์ ์ธ๋ฑ์ค๊ฐ ํ์๋จ
- selection list
- grouped
- ์น์
์ด ๊ทธ๋ฃนํ๋์ด์๋ ํํ๋ก, ๊ฐ๊ฐ์ ์น์
์ด ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถ๋์ด ๋ณด์
- ๊ตฌ๋ถ๋ ์น์
์ ํ์์ผ๋ก ๋ฐฐ๊ฒฝ์ด ์ฒ๋ฆฌ๋๊ณ ๊ทธ๋ฃน ๋ด์ ์
๋ค์ ํฐ์ ๋ฐฐ๊ฒฝ
์
์คํ์ผ
์
์ธ์๋ฆฌ ๋ทฐ
accessory-type constants๋ก ์ ๊ณต๋๋ ์ธ ๊ฐ์ ํ์ค ๋ทฐ๊ฐ ์๋ค.