Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 54

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 4.1.

4.10. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ элСмСнта управлСния, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ…

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС красивый элСмСнт управлСния для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ элСмСнт управлСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ ΠΈ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятным инструмСнтом: Ρ‚Π°ΠΊΠΎΠΉ инструмСнт позволяСт Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с экрана, Π° ΠΏΠΎΡ‚ΠΎΠΌ вновь вывСсти Π΅Π΅, Π½ΠΎ ΡƒΠΆΠ΅ с ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 4.24.


Рис. 4.24. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ управлСния для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, располоТСнный Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ

РСшСниС

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π° (Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4.9) ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π² качСствС значСния Π΅Π³ΠΎ свойства refreshControl Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр класса UIRefreshControl, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:


β€” (id)initWithStyle:(UITableViewStyle)style{

self = [super initWithStyle: style];

if (self) {


[self.tableView registerClass: [UITableViewCell class]

forCellReuseIdentifier: CellIdentifier];

self.allTimes = [NSMutableArray arrayWithObject: [NSDate date]];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ элСмСнт управлСния для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ */

self.refreshControl = [[UIRefreshControl alloc] init];

self.refreshControl = self.refreshControl;

[self.refreshControl addTarget: self

action:@selector(handleRefresh:)

forControlEvents: UIControlEventValueChanged];


}

return self;

}

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ управлСния для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ β€” это простыС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π°Π΄ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ какая-Ρ‚ΠΎ информация Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ сСйчас обновится. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Mail Π² вСрсиях ΡΡ‚Π°Ρ€ΡˆΠ΅ iOS 6, Π²Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Refresh (ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ). Π’ Π½ΠΎΠ²ΠΎΠΉ iOS 7 Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΡ‚ΡΠ½ΡƒΡ‚ΡŒ список Π²Π°ΡˆΠΈΡ… писСм Π²Π½ΠΈΠ·, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ письмами ΠΈΠ· Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ° Π½Π΅ успСли ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ iOS зафиксируСт Ρ‚Π°ΠΊΠΎΠΉ ТСст, систСма ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠšΡ€ΡƒΡ‚ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Π­Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ появилось Π² Twitter-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ для iPhone, большоС спасибо Π·Π° это Π΅Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Apple ΠΏΠΎ достоинству ΠΎΡ†Π΅Π½ΠΈΠ»Π° всю ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ этой возмоТности обновлСния Π²ΠΈΠ΄ΠΎΠ², поэтому Π² SDK Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Класс, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ этому ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, называСтся UIRefreshControl.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр этого класса, достаточно просто Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ init. Π‘Π΄Π΅Π»Π°Π² это, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ экзСмпляр ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π²ΠΈΠ΄Π°, ΠΊΠ°ΠΊ описано Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°.

Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Для этого просто Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра addTarget: action: forControlEvents: ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎ элСмСнта ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅ΠΌΡƒ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ вмСстС с сСлСктором этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° β€” ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ систСма сдСлаСт Π·Π° вас. ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ событиС UIControlEventValueChanged ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ forControlEvents этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

БСйчас я это ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠΌΠ΅Π΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π΄Π°Ρ‚Π° ΠΈ врСмя Π² строковом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ список, потянув Π΅Π³ΠΎ Π²Π½ΠΈΠ·, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ сюда Π½ΠΎΠ²Ρ‹Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, измСняя Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. Π˜Ρ‚Π°ΠΊ, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ опускаСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, инициируСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ² Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄. Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ с Ρ„Π°ΠΉΠ»Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ элСмСнт управлСния для обновлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ источник Π΄Π°Π½Π½Ρ‹Ρ…:


#import Β«ViewController.hΒ»


static NSString *CellIdentifier = @"Cell";

@interface ViewController ()

@property (nonatomic, strong) NSMutableArray *allTimes;

@property (nonatomic, strong) UIRefreshControl *refreshControl;

@end


@implementation ViewController


Бвойство allTimes β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ измСняСмый массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС экзСмпляры NSDate Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠœΡ‹ ΡƒΠΆΠ΅ рассмотрСли ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, поэтому я Π½Π΅ Π±ΡƒΠ΄Ρƒ вновь ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ± этом. Но, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΌΡ‹ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ»ΠΈ событиС UIControlEventValueChanged ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎ элСмСнта управлСния ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ handleRefresh:. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΡ‹ всСго лишь собираСмся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ массиву Π΄Π°Ρ‚Ρƒ ΠΈ врСмя, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄:


β€” (void) handleRefresh:(id)paramSender{


/* ΠžΡΡ‚авляСм Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ высвобоТдСниСм ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎ элСмСнта

управлСния ΠΈ самим ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ обновлСния. Π’Π°ΠΊ вСсь процСсс выглядит

Π² интСрфСйсС Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½ΠΎ, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ */

int64_t delayInSeconds = 1.0f;

dispatch_time_t popTime =

dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);


dispatch_after(popTime, dispatch_get_main_queue(), ^(void){


/* Π”обавляСм Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ ΠΊ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒΡΡ списку Π΄Π°Ρ‚;

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ

элСмСнт Π½Π° ΡΠΊΡ€Π°Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π°Π΄ старым ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚

Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΄ΠΎ ΠΈ послС обновлСния */

[self.allTimes addObject: [NSDate date]];


[self.refreshControl endRefreshing];


NSIndexPath *indexPathOfNewRow =

[NSIndexPath indexPathForRow: self.allTimes.count-1 inSection:0];

[self.tableView

insertRowsAtIndexPaths:@[indexPathOfNewRow]

withRowAnimation: UITableViewRowAnimationAutomatic];

});


}


ПослСдний Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: ΠΌΡ‹ записываСм Π΄Π°Ρ‚Ρƒ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° ΠΈ источника Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:


β€” (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 1;

}


β€” (NSInteger) tableView:(UITableView *)tableView

numberOfRowsInSection:(NSInteger)section{

return self.allTimes.count;

}


β€” (UITableViewCell *)tableView:(UITableView *)tableView

cellForRowAtIndexPath:(NSIndexPath *)indexPath{


UITableViewCell *cell = [tableView

dequeueReusableCellWithIdentifier: CellIdentifier

forIndexPath: indexPath];


cell.textLabel.text = [NSString stringWithFormat:@"%@",

self.allTimes[indexPath.row]];


return cell;

}


ΠžΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π² эмуляторС ΠΈΠ»ΠΈ Π½Π° устройствС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. ΠžΡ‚ΠΊΡ€Ρ‹Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ сразу Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² спискС. Но Ссли ΠΏΠΎΡ‚ΡΠ½ΡƒΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π²Π½ΠΈΠ·, Ρ‚ΠΎ постСпСнно ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты (см. рис. 4.24).

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 4.9.

Π“Π»Π°Π²Π° 5. ВыстраиваниС слоТных ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сборных Π²ΠΈΠ΄ΠΎΠ²

5.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈ. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΡƒΠ΄Ρ€ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Π½Π΅Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡ… содСрТимоС всСгда ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Π­Ρ‚ΠΎ Π½Π΅ настоящиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹-сСтки, поэтому ΠΎΠ½ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° сСтки. Однако программист ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π² ситуации, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° экранС Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ со строками ΠΈ столбцами, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ячССк Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Π’ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Ρƒ вас фактичСски имССтся всСго ΠΎΠ΄ΠΈΠ½ столбСц с мноТСством строк. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ иллюзию мноТСства столбцов, Ρ‚ΠΎ придСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ячСйку ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π΅Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½Π° состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… столбцов.

Π‘Π±ΠΎΡ€Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹, состоят ΠΈΠ· ячССк, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ каТдая ячСйка содСрТит элСмСнт ΠΈΠ»ΠΈ Π²ΠΈΠ΄, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π½Π° экранС. Π―Ρ‡Π΅ΠΉΠΊΠΈ Π² сборных Π²ΠΈΠ΄Π°Ρ… доступны для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Ρ‹ΠΌΠ°Ρ‚ΡŒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π° экран Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° это ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ. Но ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° страницы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ практичСски любой Π²ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠΌΠΎΠΉ Π½Π° Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ экранС.

ИмСнно поэтому Π² 6-ΠΉ вСрсии iOS компания Apple Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²Π½Π΅Π΄Ρ€ΠΈΠ»Π° сборныС Π²ΠΈΠ΄Ρ‹. Π‘Π±ΠΎΡ€Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с сильно ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ. Π£ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ источник Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π΄Π΅Π»Π΅Π³Π°Ρ‚, ΠΊΠ°ΠΊ ΠΈ Ρƒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Но ΠΎΠ½ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΈΠΌ свойством, Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΠΌ Π΅Π³ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСсхоТим с Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ Π²ΠΈΠ΄Π°ΠΌΠΈ. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΌΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅.

Π’ сущности, ΠΌΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ вычисляСт, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, входящий Π² состав сборного Π²ΠΈΠ΄Π°. Однако Apple Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТнила Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π²Π½Π΅Π΄Ρ€ΠΈΠ² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ класс для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со сборными Π²ΠΈΠ΄Π°ΠΌΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ этот класс нСльзя ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ВмСсто этого придСтся ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подкласс ΠΎΡ‚ этого класса, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ UICollectionViewFlowLayout.

Π­Ρ‚ΠΎΡ‚ подкласс обСспСчиваСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ячСйки ΠΈΠ· сборного Π²ΠΈΠ΄Π° Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° экранС ΠΏΠΎ сСкциям. КаТдая сСкция β€” это Π³Ρ€ΡƒΠΏΠΏΠ° ячССк сборного Π²ΠΈΠ΄Π°, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Однако Π² сборном Π²ΠΈΠ΄Π΅ любая сСкция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° экранС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ. НапримСр, Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится своя малСнькая Ρ‚Π°Π±Π»ΠΈΡ†Π° (рис. 5.1).