PureLayout (рднрд╛рдЧ 2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдмрдВрдзреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЛ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ UI рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдХрд░ UI рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ ред

рдЫрд╡рд┐

PureLayout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдпрд╛ рдПрдирдЖрдИрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рд╕рд░рд▓ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ред рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдо рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗ:

  • UINavigationController / рдмрд╛рд░
  • UITableView
  • рд╕реНрд╡-рдЖрдХрд╛рд░ рдХрд╛ UITableViewCell


UINavigationController


рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдЖрдкрдХреЛ рд╕рдВрднрд╡рддрдГ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рд╕реЗ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдлрд┐рд░ рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХреЗред UINavigationController рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

UINavigationController рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдЯреИрдХ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдКрдкрд░рд╡рд╛рд▓рд╛ рджреГрд╢реНрдп рджреЗрдЦрддрд╛ рд╣реИ (рдЕрднреА рдЬреЛ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдЕрднреА (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдКрдкрд░ рдХреЛрдИ рдЕрдиреНрдп рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рд╣рдо рдкрд╕рдВрджреАрджрд╛ рдХрд╣рддреЗ рд╣реИрдВ) рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рдФрд░ рдЬрдм рдЖрдк рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╢реАрд░реНрд╖ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ "рдмреИрдХ" рдмрдЯрди рдмрдирд╛рддрд╛ рд╣реИ (рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдКрдкрд░реА рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рддрд░рдл), рдФрд░ рдЗрд╕ рдмрдЯрди рдХреЛ рджрдмрд╛рдиреЗ рд╕реЗ рдЖрдк рдкрд┐рдЫрд▓реЗ рджреГрд╢реНрдп рдкрд░ рд▓реМрдЯ рдЖрддреЗ рд╣реИрдВред

рдпрд╣ рд╕рдм рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдПрдХ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдВрдХреНрддрд┐ рд▓рдЧ рдЬрд╛рдПрдЧреА (рдпрджрд┐ рдЖрдк рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ)ред
AppDelegate.swift рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреА рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ, viewController = ViewController ():

 let navigationController = UINavigationController(rootViewController: viewController) 

рдЕрдм self.window? .RootViewController = viewController self.window? .RootViewController = navigationController рдмрджрд▓реЗрдВ self.window? .RootViewController = viewController self.window? .RootViewController = navigationController self.window? .RootViewController = viewController self.window? .RootViewController = navigationController self.window? .RootViewController = viewController self.window? .RootViewController = navigationController ред рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдордиреЗ UINavigationController рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ rootViewController рд╡реНрдпреВ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ rootViewController , рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рдмрд╣реБрдд рдиреАрдЪреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рд╡реНрдпреВ рдХреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдкрд░ рдмреИрдХ рдмрдЯрди рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдЕрдкрдиреА рд╡рд┐рдВрдбреЛ рдХреЛ rootViewController рд░реВрдк рдореЗрдВ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ rootViewController , рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЗрд╕рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рднреА рд╡рд┐рдЪрд╛рд░ рд╣реЛрдВрдЧреЗред

рдЕрдм рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд░рди рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рд╣рдорд╛рд░реЗ рдКрдкрд░реА рджреГрд╢реНрдп рдХреЛ рдУрд╡рд░рд▓реИрдк рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ upperView рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдПрдВред
  • isTranslucent рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреА isTranslucent рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрд╣ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЛ рдЕрдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛ рджреЗрдЧрд╛ (рдпрджрд┐ рдЖрдкрдиреЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ), рдФрд░ рдЕрдм рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХрд╛ рдКрдкрд░реА рдХрд┐рдирд╛рд░рд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЗ рдиреАрдЪреЗ рдмрди рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреВрдВрдЧрд╛, рд▓реЗрдХрд┐рди, рдЖрдк рдкрд╣рд▓реЗ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗред рдореИрдВ UINavigationController рдФрд░ UINavigationBar рдкрд░ Apple рдХреЗ рдбреЙрдХреНрд╕ рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:


рдЕрдм viewDidLoad рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝реЗрдВ self.navigationController? .NavigationBar.isTranslucent = false super.viewDidLoad () self.navigationController? .NavigationBar.isTranslucent = false super.viewDidLoad () , рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ self.navigationController? .NavigationBar.isTranslucent = false super.viewDidLoad () :

 override func viewDidLoad() { super.viewDidLoad() self.navigationController?.navigationBar.isTranslucent = false self.view.backgroundColor = .white self.addSubviews() self.setupConstraints() self.view.bringSubview(toFront: avatar) self.view.setNeedsUpdateConstraints() } 

рдЖрдк рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ self.title = "John Doe" viewDidLoad рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдореЗрдВ "рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓" рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдирд╛


рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдкрдиреА ViewController.swift рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ViewController.swift рд╣рдо рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рди рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ ViewController.swift ред рд╣рдо рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ UIView рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рдХрд░ рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╢реЙрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ рдпрд╛ рдПрдорд╡реАрд╕реА рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред IOS рдкрд░ MVC рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ (MVC) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ : рдПрдХ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг ред

рдЕрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ ContactCard рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ "рдирдИ рдлрд╝рд╛рдЗрд▓" рдЪреБрдиреЗрдВ:

рдЫрд╡рд┐

рдХреЛрдХреЛ рдЯрдЪ рдХреНрд▓рд╛рд╕ рдФрд░ рдлрд┐рд░ рдиреЗрдХреНрд╕реНрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдм рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ "ProfileView" рд▓рд┐рдЦреЗрдВ, рдФрд░ "рдЙрдкрд╡рд░реНрдЧ:" рдХреЗ рдмрдЧрд▓ рдореЗрдВ "UIView" рджрд░реНрдЬ рдХрд░реЗрдВред рдпрд╣ рд╕рд┐рд░реНрдл Xcode рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЛ UIView рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдЕрдм Next рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:

 /* // Only override draw() if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func draw(_ rect: CGRect) { // Drawing code } */ 

рдФрд░ рдЕрдм рд╣рдо рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдирдП рджреГрд╢реНрдп рдореЗрдВ рджреГрд╢реНрдп рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд╕рднреА рдЖрд▓рд╕реА рдЪрд░ рдХрд╛рдЯреЗрдВ рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред
рдЕрдВрддрд┐рдо рд▓рдВрдмрд┐рдд рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдиреАрдЪреЗ, рдУрд╡рд░рд░рд╛рдЗрдб init(frame :) init рд▓рд┐рдЦрдХрд░ рдФрд░ рдлрд┐рд░ Xcode рд╕реЗ рдкрд╣рд▓рд╛ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо рдЪреБрдиреЗрдВред

рдЫрд╡рд┐

рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рджрд┐рдЦрд╛рдИ рджреЗрдЧреА рдХрд┐ "рдЖрд╡рд╢реНрдпрдХ" рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ "рдЗрдирд┐рдЯ (рдХреЛрдбрд░ :)" "рдЙрдкрд╡рд┐рд╢реЗрд╖" рдХреЗ рдЙрдкрд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдЖрдк рд▓рд╛рд▓ рд╕рд░реНрдХрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдареАрдХ рдХрд░реЗрдВред

рдЫрд╡рд┐

рдХрд┐рд╕реА рднреА рдУрд╡рд░рд░рд╛рдЗрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ, рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рд╡рд┐рдзрд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЬреЛрдбрд╝реЗрдВ: super.init (frame: frame) ред
addSubviews() рддрд╣рдд addSubviews() рд╡рд┐рдзрд┐ рдХреЛ рдХрд╛рдЯреЗрдВ рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ addSubview рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ self.view рд╣рдЯрд╛рдПрдВред

 func addSubviews() { addSubview(avatar) addSubview(upperView) addSubview(segmentedControl) addSubview(editButton) } 

рдлрд┐рд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ:

 override init(frame: CGRect) { super.init(frame: frame) addSubviews() bringSubview(toFront: avatar) } 

рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд▓рд┐рдП, updateConstraints() рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ (рдЬрд╣рд╛рдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдЧрд╛):

 override func updateConstraints() { // Insert code here super.updateConstraints() // Always at the bottom of the function } 

рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрд╢рд╛ Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рдЬрд╛рдХрд░ рдпрд╛ рдЕрдзрд┐рдХ, рдмрд╕ рд╡рд┐рдХрд▓реНрдк (рдпрд╛ Alt) рдХреБрдВрдЬреА рдХреЛ рджрдмрд╛рдХрд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ:

рдЫрд╡рд┐

рд╣рдорд╛рд░реА рдирдИ рд╡рд┐рдзрд┐ рдореЗрдВ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдмрд╛рдзрд╛ рдХреЛрдб рдХреЛ рдХрд╛рдЯреЗрдВ рдФрд░ рдЪрд┐рдкрдХрд╛рдПрдБ:

 override func updateConstraints() { avatar.autoAlignAxis(toSuperviewAxis: .vertical) avatar.autoPinEdge(toSuperviewEdge: .top, withInset: 64.0) upperView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .bottom) segmentedControl.autoPinEdge(toSuperviewEdge: .left, withInset: 8.0) segmentedControl.autoPinEdge(toSuperviewEdge: .right, withInset: 8.0) segmentedControl.autoPinEdge(.top, to: .bottom, of: avatar, withOffset: 16.0) editButton.autoPinEdge(.top, to: .bottom, of: upperView, withOffset: 16.0) editButton.autoPinEdge(toSuperviewEdge: .right, withInset: 8.0) super.updateConstraints() } 

рдЕрдм рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ ProfileView рд╡рд┐рдзрд┐ рдкрд░ ProfileView рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред ProfileView let profileView = ProfileView(frame: .zero) , рдЗрд╕реЗ let profileView = ProfileView(frame: .zero) рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЕрдм рд╣рдорд╛рд░рд╛ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рдордЯ рдЧрдпрд╛ рд╣реИ!

 import UIKit import PureLayout class ViewController: UIViewController { let profileView = ProfileView(frame: .zero) override func viewDidLoad() { super.viewDidLoad() self.navigationController?.navigationBar.isTranslucent = false self.title = "Profile" self.view.backgroundColor = .white self.view.addSubview(self.profileView) self.profileView.autoPinEdgesToSuperviewEdges() self.view.layoutIfNeeded() } } 

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

рдПрдХ рдкрддрд▓реА, рд╕рд╛рдл-рд╕реБрдерд░реА рд╕рдореАрдХреНрд╖рд╛ рдирд┐рдпрдВрддреНрд░рдХ рд╣реЛрдирд╛ рд╣рдореЗрд╢рд╛ рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд░рдЦрд░рдЦрд╛рд╡ рдХреЗ рджреМрд░рд╛рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░реЗрд╢рд╛рдиреА рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред

UITableView


рдЖрдЧреЗ рд╣рдо рдлреЛрди рдирдВрдмрд░, рдкрддрд╛ рдЖрджрд┐ рдЬреИрд╕реЗ рд╕рдВрдкрд░реНрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдЖрдИрдЯреЗрдмрд▓ рд╡реНрдпреВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ UITableView, UITableViewDataSource, рдФрд░ UITableViewDelegate рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдХреЗ рд▓рд┐рдП Apple рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрд░ рдЬрд╛рдПрдВред


ViewController.swift рдЬрд╛рдПрдВ рдФрд░ viewDidLoad() рдКрдкрд░ viewDidLoad() tableView рд▓рд┐рдП lazy var рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ:

 lazy var tableView: UITableView = { let tableView = UITableView() tableView.translatesAutoresizingMaskIntoConstraints = false tableView.delegate = self tableView.dataSource = self return tableView }() 

рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Xcode рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рди рддреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИ рдФрд░ рди рд╣реА UITableViewController рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрди рджреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:

 class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { . . . 

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, Xcode рдПрдХ рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ рдЬреЛ UITableViewDataSource рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред Cmd + Control рдХреЛ рдкрдХрдбрд╝рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕реА рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ UITableViewDataSource рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЖрдк рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред optional рд╢рдмреНрдж рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int - рдпрд╣ рд╡рд┐рдзрд┐ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рддрдиреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  2. public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell - рдпрд╣ рд╡рд┐рдзрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реЗрд▓ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддреА рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рд╕реЗрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ (рдпрд╛ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ) рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рд▓рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд╕реЗрд▓ рдлреЛрди рдирдВрдмрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рджреВрд╕рд░рд╛ рд╕реЗрд▓ рдкрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдЕрдм ViewController.swift рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, numberOfRowsInSection рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдЬрдм рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рджрд┐рдЦрд╛рдИ рджреЗ, рддреЛ рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { <#code#> } 

рд╢рдмреНрдж рдХреЛрдб рд╣рдЯрд╛рдПрдВ рдФрд░ рдЕрдм 1 рдкрд░ рд▓реМрдЯреЗрдВред

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд╣рдд, cellForRowAt рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { <#code#> } 

рдФрд░, рдлрд┐рд░ рд╕реЗ, рдЕрдм рдХреЗ рд▓рд┐рдП, рдПрдХ UITableViewCell рд▓реМрдЯреЗрдВред

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return UITableViewCell() } 

рдЕрдм ProfileView рдЕрдВрджрд░ рдЕрдкрдиреЗ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдП рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╡рд╣ рдЗрд╕реЗ рдПрдХ рд╕рдмрд╡реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдмрдВрдз рд╕реЗрдЯ рдХрд░ рд╕рдХреЗред

ProfileView.swift рдЬрд╛рдПрдВ рдФрд░ ProfileView.swift рдареАрдХ рдКрдкрд░ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ:

var tableView: UITableView! рдЗрд╕рд▓рд┐рдП, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рд╣реЛрдЧрд╛ред

рдЕрдм рдкреБрд░рд╛рдиреЗ init (frame :) рд▓рд╛рдЧреВ рдХрд░реЗрдВ:

 init(tableView: UITableView) { super.init(frame: .zero) self.tableView = tableView addSubviews() bringSubview(toFront: avatar) } 

Xcode рдЕрдм рд▓рд╛рдкрддрд╛ ProfileView рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░реЗрдЧрд╛ init (frame :) ProfileView рд▓рд┐рдП init (frame :) , рдЗрд╕рд▓рд┐рдП ViewController.swift рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ let profileView = ProfileView (frame: .zero) рдХреЛ рдмрджрд▓ let profileView = ProfileView (frame: .zero)

 lazy var profileView: UIView = { return ProfileView(tableView: self.tableView) }() 

рдЕрдм рд╣рдорд╛рд░реЗ ProfileView рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ ProfileView рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдкреНрд░рддрд┐рдмрдВрдз рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
ProfileView.swift рд╡рд╛рдкрд╕, ProfileView.swift addSubview(tableView) рдХреЗ рдЕрдВрдд рдореЗрдВ addSubview(tableView) рдЬреЛрдбрд╝реЗрдВ рдФрд░ updateConstraints() рдкрд░ super.updateConstraints рд▓рд┐рдП рдЗрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ:

 tableView.autoPinEdgesToSuperviewEdges(with: .zero, excludingEdge: .top) tableView.autoPinEdge(.top, to: .bottom, of: segmentedControl, withOffset: 8) 

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдФрд░ рдЙрд╕рдХреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдг рдХреЗ рдмреАрдЪ рддреАрди рдкреНрд░рддрд┐рдмрдВрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдХреЗ рджрд╛рдИрдВ, рдмрд╛рдИрдВ рдФрд░ рдиреАрдЪреЗ рдХреА рдУрд░ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рджрд╛рдИрдВ, рдмрд╛рдИрдВ рдФрд░ рдиреАрдЪреЗ рдХреА рдУрд░ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред

рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдЙрди рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдЖрда рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЦрдВрдб рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдиреАрдЪреЗ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдорд╣рд╛рди, рдЕрдм рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рд╣реИ, рдФрд░ рд╣рдо рдЕрдкрдиреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

UITableViewCell


UITableViewCell рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЙрдк-рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ ContactCard рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ "рдирдИ рдлрд╝рд╛рдЗрд▓ ...", рдлрд┐рд░ "рдХреЛрдХреЛ рдЯрдЪ рдХреНрд▓рд╛рд╕" рдФрд░ "рдЕрдЧрд▓рд╛"ред

"рдЙрдкрд╡рд░реНрдЧ:" рдлрд╝реАрд▓реНрдб рдореЗрдВ "UITableViewCell" рджрд░реНрдЬ рдХрд░реЗрдВ, рдФрд░ Xcode рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо "TableViewCell" рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░реЗрдЧрд╛ред рд╕реНрд╡рдд: рдкреВрд░реНрдг рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ "ProfileView" рджрд░реНрдЬ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЕрдВрддрд┐рдо рдирд╛рдо "ProfileInfoTableViewCell" рд╣реЛ, рдлрд┐рд░ "рдЕрдЧрд▓рд╛" рдФрд░ "рдмрдирд╛рдПрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЖрдЧреЗ рдмрдврд╝реЛ рдФрд░ рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрднреА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рд╣рдорд╛рд░реЗ рд╕реЗрд▓ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА, рдЬреЛ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 lazy var titleLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.text = "Title" return label }() lazy var descriptionLabel: UILabel = { let label = UILabel() label.translatesAutoresizingMaskIntoConstraints = false label.text = "Description" label.textColor = .gray return label }() 

рдФрд░ рдЕрдм рд╣рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕реЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

 override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) contentView.addSubview(titleLabel) contentView.addSubview(descriptionLabel) } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } 

рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╣рдо рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ:

 override func updateConstraints() { let titleInsets = UIEdgeInsetsMake(16, 16, 0, 8) titleLabel.autoPinEdgesToSuperviewEdges(with: titleInsets, excludingEdge: .bottom) let descInsets = UIEdgeInsetsMake(0, 16, 4, 8) descriptionLabel.autoPinEdgesToSuperviewEdges(with: descInsets, excludingEdge: .top) descriptionLabel.autoPinEdge(.top, to: .bottom, of: titleLabel, withOffset: 16) super.updateConstraints() } 

рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдмрд▓ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд┐рдХреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UIEdgeInsets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред UIEdgeInsetsMake(top:, left:, bottom:, right:) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UIEdgeInsets рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, titleLabel рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╢реАрд░реНрд╖ рд╕реАрдорд╛ рдЪрд╛рд░ рдЕрдВрдХ рд╣реЛ, рдФрд░ рджрд╛рдПрдВ рдФрд░ рдмрд╛рдПрдВ рдЖрда рд╣реЛред рд╣рдо рдиреАрдЪреЗ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╡рд┐рд╡рд░рдг рдЪрд┐рд╣реНрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЗ рд╕рднреА рдЕрд╡рд░реЛрдзреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рдирдЯ рд▓реЗрдВред

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдореЗрдВ рдбреНрд░рд╛рдЗрдВрдЧ рд╕реЗрд▓ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП ViewController.swift рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдХреЗ рдЖрд▓рд╕реА рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдКрдВрдЪрд╛рдИ рд╕реЗрдЯ рдХрд░реЗрдВред

 let profileInfoCellReuseIdentifier = "profileInfoCellReuseIdentifier" lazy var tableView: UITableView = { ... tableView.register(ProfileInfoTableViewCell.self, forCellReuseIdentifier: profileInfoCellReuseIdentifier) tableView.rowHeight = 68 return tableView }() 

рд╣рдо рд╕реЗрд▓ рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╣реИ рдЬрд┐рд╕реЗ UITableView рдкреБрдирдГ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдФрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рдирдП рд╕реЗрд▓ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирдИ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдереЗред
рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реЗрд▓ рдореЗрдВ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рд╡рд┐рдзрд┐:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: profileInfoCellReuseIdentifier, for: indexPath) as! ProfileInfoTableViewCell return cell } 

рдпрд╣рд╛рдВ рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрддрд╛рд░ рд╕реЗ рдПрдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╕реЗрд▓ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╣рдордиреЗ рдЙрд╕ рд╕реЗрд▓ рдХреЛ рдкрде рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рд╕реЗрд▓ рдХреЛ ProfileInfoTableViewCell рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВ, рддрд╛рдХрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... switch indexPath.row { case 0: cell.titleLabel.text = "Phone Number" cell.descriptionLabel.text = "+234567890" case 1: cell.titleLabel.text = "Email" cell.descriptionLabel.text = "john@doe.co" case 2: cell.titleLabel.text = "LinkedIn" cell.descriptionLabel.text = "www.linkedin.com/john-doe" default: break } return cell } 

рдЕрдм тАЬ3тАЭ рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП numberOfRowsInSection рд╕реЗрдЯ рдХрд░реЗрдВред

рдЫрд╡рд┐

рдХрдорд╛рд▓ рд╣реИ рдирд╛?

рд╕реЗрд▓реНрдл-рд╕рд┐рдЬрд┐рдВрдЧ рд╕реЗрд▓


рд╢рд╛рдпрдж, рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реЛрдЧрд╛ рдЬрдм рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЙрдирдХреЗ рдЕрдВрджрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдкрд░ рд╣реЛрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, ProfileInfoTableViewCell рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ descriptionLabel рдЬреЛрдбрд╝реЗрдВред

 label.numberOfLines = 0 

ViewController рд▓реМрдЯреЗрдВ рдФрд░ рдЗрди рджреЛрдиреЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЯреЗрдмрд▓ рд╡реНрдпреВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 lazy var tableView: UITableView = { ... tableView.estimatedRowHeight = 64 tableView.rowHeight = UITableViewAutomaticDimension return tableView }() 

рдпрд╣рд╛рдВ рд╣рдо рдЯреЗрдмрд▓ рд╡реНрдпреВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрдВрдХреНрддрд┐ рдХреА рдКрдВрдЪрд╛рдИ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдиреБрдорд╛рдирд┐рдд рдкрдВрдХреНрддрд┐ рдКрдВрдЪрд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:
"рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдКрдВрдЪрд╛рдИ рдХрд╛ рдПрдХ рдЧреИрд░-рдЕрдиреБрдорд╛рдирд╛рддреНрдордХ рдЕрдиреБрдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред" - Apple рдбреЙрдХреНрд╕

ViewDidLoad рд╣рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 override func viewDidLoad() { super.viewDidLoad() ... DispatchQueue.main.async { self.tableView.reloadData() } } 

рдЕрдм рдЖрдЧреЗ рдмрдврд╝реЗрдВ рдФрд░ рдПрдХ рдФрд░ рд╕реЗрд▓ рдЬреЛрдбрд╝реЗрдВ, рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЪрд╛рд░ рддрдХ cellForRow рдФрд░ cellForRow рдПрдХ рдФрд░ switch :

 case 3: cell.titleLabel.text = "Address" cell.descriptionLabel.text = "45, Walt Disney St.\n37485, Mickey Mouse State" 

рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ, рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЫрд╡рд┐

рдирд┐рд╖реНрдХрд░реНрд╖


рдХрдорд╛рд▓ рд╣реИ рдирд╛? рдФрд░ рдЗрд╕ рдмрд╛рдд рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреНрдпреЛрдВ рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реА рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реА рдореЛрдмрд╛рдЗрд▓ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ рдХрд┐ рд╣рдо рдЗрдВрд╕реНрдЯрд╛рдмрдЧ рдореЗрдВ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЖрдкрдиреЗ рдЗрд╕ рдкрд╛рда рдХреЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИ:

  • рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ main.storyboard рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
  • рд╣рдордиреЗ UIWindow рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ rootViewController рд╕реМрдВрдкрд╛ред
  • рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡, рдЬреИрд╕реЗ рдХрд┐ рд▓реЗрдмрд▓, рдЫрд╡рд┐ рджреГрд╢реНрдп, рдЦрдВрдбрд┐рдд рдирд┐рдпрдВрддреНрд░рдг, рдФрд░ рдЙрдирдХреЗ рдХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рджреГрд╢реНрдп рдмрдирд╛рдП рдЧрдПред
  • рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб UINavigationBar ред
  • рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЖрдХрд╛рд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ UITableViewCell ред

Source: https://habr.com/ru/post/hi447374/


All Articles