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

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

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

Как объяснялось Ρ€Π°Π½Π΅Π΅, Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ события, направляСмыС Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ-Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρƒ. Кнопка Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ запускаСт событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ принято ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠΌ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°:


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

accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{


/* Π”Π΅Π»Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. */

NSLog(@"Accessory button is tapped for cell at index path = %@",

indexPath);


UITableViewCell *ownerCell = [tableView cellForRowAtIndexPath: indexPath];


NSLog(@"Cell Title = %@", ownerCell.textLabel.text);


}


Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΡ‰Π΅Ρ‚ ячСйку Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΠΊΠ½Π΅ консоли содСрТимоС тСкстовой ΠΌΠ΅Ρ‚ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ячСйки. Напоминаю: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠΊΠ½ΠΎ консоли Π² Xcode, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Run\Console (Запуск\Консоль).

4.3. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π² ячСйкС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°

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

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов, прСдоставляСмых Π² iOS, нСдостаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнныС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты.

РСшСниС

ΠŸΡ€ΠΈΡΠ²ΠΎΠΉΡ‚Π΅ экзСмпляр класса UIView свойству accessoryView любого экзСмпляра класса UITableViewCell:


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

cellForRowAtIndexPath:(NSIndexPath *)indexPath{


UITableViewCell* cell = nil;


cell = [tableView dequeueReusableCellWithIdentifier: MyCellIdentifier

forIndexPath: indexPath];


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

(long)indexPath.section,

(long)indexPath.row];


UIButton *button = [UIButton buttonWithType: UIButtonTypeSystem];

button.frame = CGRectMake(0.0f, 0.0f, 150.0f, 25.0f);


[button setTitle:@"Expand"

forState: UIControlStateNormal];


[button addTarget: self

action:@selector(performExpand:)

forControlEvents: UIControlEventTouchUpInside];


cell.accessoryView = button;


return cell;


}


Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² этом ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ performExpand:. Он ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ сСлСктора для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:


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

/* ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ событиС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ */

}


Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠΎΠ΄Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ создаваСмая Π½Π°ΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° присваиваСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 4.4.


Рис. 4.4. Π―Ρ‡Π΅ΠΉΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ

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

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° UITableViewCell содСрТит свойство accessoryView. Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли вас Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ встроСнныС Π² SDK iOS Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ для Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… ячССк. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Π½ΠΎ это свойство, Cocoa Touch Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства accessoryType ΠΈ станСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄, присвоСнный свойству accessoryView, Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π² ячСйкС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’ ΠΊΠΎΠ΄Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ «РСшСниС» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΌΡ‹ создаСм ΠΊΠ½ΠΎΠΏΠΊΠΈ для всСх ячССк, находящихся Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² любой ячСйкС вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ performExpand:. И Ссли Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ я, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ стали Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ вопросом: ΠΊΠ°ΠΊ ΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ячСйкС относится ΠΊΠ½ΠΎΠΏΠΊΠ°-ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ? Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ с Ρ‚Π΅ΠΌΠΈ ячСйками, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ относятся.

Один ΠΈΠ· способов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ситуации связан с использованиСм свойства tag экзСмпляра ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π­Ρ‚ΠΎ свойство-ΠΌΠ΅Ρ‚ΠΊΠ° прСдставляСт собой ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ассоциирования Π²ΠΈΠ΄Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ячСйкой Π² вашСм Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Ρ‚ΠΎ слСдуСт Π·Π°Π΄Π°Ρ‚ΡŒ для свойства-ΠΌΠ΅Ρ‚ΠΊΠΈ этой ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3. Но здСсь Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄Π°Ρ… Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Ρ‹, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ n ячССк. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΌ трСбуСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Ρ€Π°Π·Π΄Π΅Π» Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΈ ячСйку, которая Π²Π»Π°Π΄Π΅Π΅Ρ‚ нашСй ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ свойства-ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число, эта Π·Π°Π΄Π°Ρ‡Π° сущСствСнно услоТняСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ вмСсто Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, рСкурсивно проходя Π²Π²Π΅Ρ€Ρ… ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²ΠΈΠ΄ΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΠΌ ячСйку Ρ‚ΠΈΠΏΠ° UITableViewCell, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:


β€” (UIView *) superviewOfType:(Class)paramSuperviewClass

forView:(UIView *)paramView{


if (paramView.superview!= nil){

if ([paramView.superview isKindOfClass: paramSuperviewClass]){

return paramView.superview;

} else {

return [self superviewOfType: paramSuperviewClass

forView: paramView.superview];

}


}


return nil;


}


β€” (void) performExpand:(UIButton *)paramSender{


/* ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ событиС наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ */

__unused UITableViewCell *parentCell =

(UITableViewCell *)[self superviewOfType: [UITableViewCell class]

forView: paramSender];


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ячСйкой */


}


Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ простой рСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π°ΡˆΡƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ) ΠΈ имя класса (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС UITableViewCell), Π° Π·Π°Ρ‚Π΅ΠΌ просматриваСм ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ Π²ΠΈΠ΄Π°, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΌ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ Π²ΠΈΠ΄, относящийся ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅ΠΌΡƒ нас классу. Π˜Ρ‚Π°ΠΊ, ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π²ΠΈΠ΄Π°, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΌ для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ, ΠΈ Ссли этот Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ Π²ΠΈΠ΄ Π½Π΅ относится ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, Ρ‚ΠΎ просматриваСт ΠΈ Π΅Π³ΠΎ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ Π²ΠΈΠ΄, ΠΈ Ρ‚Π°ΠΊ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ², относящийся ΠΊ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌΡƒ классу. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° superviewOfType: forView: ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ структуру Class. Π’ этом Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ имя любого класса ΠΈΠ· языка Objective-C, ΠΈ это вСсьма кстати, Ссли Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ Ρƒ программиста ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° классов.

4.4. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ удалСния смахиваниСм Π² ячСйках Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ²

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

НСобходимо ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ прилоТСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

РСшСниС

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° сСлСктор tableView: editingStyleForRowAtIndexPath:, Π° Π² источникС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° β€” сСлСктор tableView: commitEditingStyle: forRowAtIndexPath::


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

editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{


return UITableViewCellEditingStyleDelete;


}


β€” (void) setEditing:(BOOL)editing

animated:(BOOL)animated{


[super setEditing: editing

animated: animated];


[self.myTableView setEditing: editing

animated: animated];


}


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

commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

forRowAtIndexPath:(NSIndexPath *)indexPath{


if (editingStyle == UITableViewCellEditingStyleDelete){


/* Π‘Π½Π°Ρ‡Π°Π»Π° удаляСм этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΈΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… */

[self.allRows removeObjectAtIndex: indexPath.row];


/* ΠŸΠΎΡ‚ΠΎΠΌ удаляСм Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с Π½ΠΈΠΌ ячСйку ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° */

[tableView deleteRowsAtIndexPaths:@[indexPath]

withRowAnimation: UITableViewRowAnimationLeft];


}


}


ΠœΠ΅Ρ‚ΠΎΠ΄ tableView: editingStyleForRowAtIndexPath: позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ удалСния. Он вызываСтся Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ, Π° Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ‚. Π΄.). ΠœΠ΅Ρ‚ΠΎΠ΄ tableView: commitEditingStyle: forRowAtIndexPath: выполняСт Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ удалСния. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² опрСдСляСтся Π² Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅, Π½ΠΎ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» нСсколько ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½: этот ΠΌΠ΅Ρ‚ΠΎΠ΄ примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удалСния Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΈ для удалСния строк ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

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

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° ТСст смахивания (Swipe), отобраТая ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² ΠΏΡ€Π°Π²ΠΎΠΉ части Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΠΎΠΉ строки (рис. 4.5). Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π½Π΅ находится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ рСдактирования, Π½ΠΎ эта ΠΊΠ½ΠΎΠΏΠΊΠ° позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ строку.


Рис. 4.5. Кнопка для удалСния, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰Π°ΡΡΡ Π² ячСйкС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°


Π’Π°ΠΊΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ активизируСтся ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tableView: editingStyleForRowAtIndexPath: (опрСдСляСмого Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ UITableViewDelegate), Ρ‡ΡŒΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки, ΠΈΠ»ΠΈ удалСния, ΠΈΠ»ΠΈ ΠΎΠ±Π΅ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ…. РСализуя ΠΌΠ΅Ρ‚ΠΎΠ΄ tableView: commitEditingStyle: forRowAtIndexPath: Π² источникС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, вставку ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅.