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

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

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² tableView: viewForHeaderInSection: ΠΈ tableView: viewForFooterInSection::


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

viewForHeaderInSection:(NSInteger)section{

UIView *header = nil;

if (section == 0){

UILabel *label = [self newLabelWithTitle:@"Section 1 Header"];

/* ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ Π½Π° 10 Ρ‚ΠΎΡ‡Π΅ΠΊ Π²ΠΏΡ€Π°Π²ΠΎ. */

label.frame = CGRectMake(label.frame.origin.x + 10.0f,

5.0f, /* ΠžΠΏΡƒΡΠΊΠ°Π΅ΠΌΡΡ Π½Π° 5 Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Π½ΠΈΠ·

ΠΏΠΎ оси y. */

label.frame.size.width,

label.frame.size.height);


/* Π”Π΅Π»Π°Π΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ содСрТащСго Π²ΠΈΠ΄Π° Π½Π° 10 Ρ‚ΠΎΡ‡Π΅ΠΊ большС,

Ρ‡Π΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Π° ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для ΠΌΠ΅Ρ‚ΠΊΠΈ трСбуСтся

10 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅. */


CGRect resultFrame = CGRectMake(0.0f,

0.0f,

label.frame.size.width + 10.0f,

label.frame.size.height);

header = [[UIView alloc] initWithFrame: resultFrame];

[header addSubview: label];


}


return header;


}


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

viewForFooterInSection:(NSInteger)section{


UIView *footer = nil;

if (section == 0){


UILabel *label = [[UILabel alloc] initWithFrame: CGRectZero];


/* ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΊΡƒ Π½Π° 10 Ρ‚ΠΎΡ‡Π΅ΠΊ Π²ΠΏΡ€Π°Π²ΠΎ. */

label.frame = CGRectMake(label.frame.origin.x + 10.0f,

5.0f, /* ΠžΠΏΡƒΡΠΊΠ°Π΅ΠΌΡΡ Π½Π° 5 Ρ‚ΠΎΡ‡Π΅ΠΊ Π²Π½ΠΈΠ· ΠΏΠΎ ΠΎΡΠΈ y*/

label.frame.size.width,

label.frame.size.height);


/* Π”Π΅Π»Π°Π΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ содСрТащСго Π²ΠΈΠ΄Π° Π½Π° 10 Ρ‚ΠΎΡ‡Π΅ΠΊ большС,

Ρ‡Π΅ΠΌ ΡˆΠΈΡ€ΠΈΠ½Π° ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ для ΠΌΠ΅Ρ‚ΠΊΠΈ трСбуСтся

10 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π² Π»Π΅Π²ΠΎΠΌ ΠΏΠΎΠ»Π΅. */

CGRect resultFrame = CGRectMake(0.0f,

0.0f,

label.frame.size.width + 10.0f,

label.frame.size.height);

footer = [[UIView alloc] initWithFrame: resultFrame];

[footer addSubview: label];


}


return footer;


}


Π’Π΅ΠΏΠ΅Ρ€ΡŒ, запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠ°ΠΊ Π½Π° рис. 4.9.


Рис. 4.9. Π’ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»ΠΎΠ²


ΠŸΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ здСсь ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ изобраТСния Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π°Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ². ЭкзСмпляры класса UIImageView ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ класса UIView, поэтому Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² Π²ΠΈΠ΄Ρ‹ для ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅/Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Если Π²Ρ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΠΈ Π½ΠΈΠΆΠ½ΠΈΡ… ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π°Ρ… Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ тСкста, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ двумя ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, опрСдСляСмыми Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ UITableViewDataSource. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ избавят вас ΠΎΡ‚ массы ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅/Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, просто ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

β€’ tableView: titleForHeaderInSection: β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° относится ΠΊ Ρ‚ΠΈΠΏΡƒ NSString. Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΊΠ΅ строку, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» Ρ€Π°Π·Π΄Π΅Π»Π°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ titleForHeaderInSection;

β€’ tableView: titleForFooterInSection: β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° относится ΠΊ Ρ‚ΠΈΠΏΡƒ NSString. Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΊΠ΅ строку, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» Ρ€Π°Π·Π΄Π΅Π»Π°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ titleForFooterInSection.

Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ прилоТСния, избавимся ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² tableView: viewForHeaderInSection: ΠΈ tableView: viewForFooterInSection:, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… рСализациями ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² tableView: titleForHeaderInSection: ΠΈ tableView: titleForFooterInSection::


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

titleForHeaderInSection:(NSInteger)section{


if (section == 0){

return @"Section 1 Header";

}


return nil;


}

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

titleForFooterInSection:(NSInteger)section{


if (section == 0){

return @"Section 1 Footer";

}


return nil;


}


Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² эмуляторС iPhone. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ автоматичСски создал для Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π° ΠΌΠ΅Ρ‚ΠΊΡƒ, Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ, Π° для Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π° β€” ΠΌΠ΅Ρ‚ΠΊΡƒ, Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ, ΠΈ помСстил ΠΈΡ… Π² СдинствСнном Ρ€Π°Π·Π΄Π΅Π»Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Π’ iOS 7 ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΈ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Ρ‹ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ. Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях iOS Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ» выравнивался ΠΏΠΎ Π»Π΅Π²ΠΎΠΌΡƒ ΠΊΡ€Π°ΡŽ, Π° Π½ΠΈΠΆΠ½ΠΈΠΉ β€” ΠΏΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. Π’ любой вСрсии Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ этих ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ (рис. 4.10).


Рис. 4.10. Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄, Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½Ρ‚ΠΈΡ‚ΡƒΠ»Π°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отобраТаСтся тСкст

4.6. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ контСкстных мСню Π² ячСйках Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ²

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

НСобходимо Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ копирования ΠΈ вставки. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ячСйку Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° экранС устройства, Π³Π΄Π΅ отобраТаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

РСшСниС

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° UITableViewDelegate Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ вашСго Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

β€’ tableView: shouldShowMenuForRowAtIndexPath: β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° относится ΠΊ Ρ‚ΠΈΠΏΡƒ BOOL. Если Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES, Ρ‚ΠΎ систСма iOS ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ для ячСйки Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° контСкстноС мСню. ИндСкс этой ячСйки Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π²Π°ΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ shouldShowMenuForRowAtIndexPath.

β€’ tableView: canPerformAction: forRowAtIndexPath: withSender: β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ относится ΠΊ Ρ‚ΠΈΠΏΡƒ BOOL. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ iOS ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ контСкстноС мСню для ячСйки Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, iOS Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ нСсколько Ρ€Π°Π· ΠΈ сообщит Π²Π°ΠΌ сСлСктор дСйствия. ПослС этого Π²Ρ‹ смоТСтС Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, слСдуСт Π»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ это дСйствиС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… контСкстного мСню. Π˜Ρ‚Π°ΠΊ, Ссли iOS ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ вас, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ мСню Copy (ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ), Ρ‚ΠΎ рассматриваСмый ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ вашСго Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ canPerformAction Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ @selector(copy:). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ этот вопрос рассматриваСтся Π² ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅Β» Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°.

β€’ tableView: performAction: forRowAtIndexPath: withSender: β€” ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСйствиС Π² спискС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² контСкстного мСню ячСйки Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ такая ситуация: ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ это дСйствиС Π² мСню, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π΅ вашСго Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Π—Π΄Π΅ΡΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ запрос. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Ρ€Π°Π» мСню Copy (ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ), Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° (Pasteboard), ΠΊΡƒΠ΄Π° помСщаСтся содСрТимоС ΠΈΠ· ячСйки Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

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

Π’Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ систСмС iOS ΠΎΡ‚Π²Π΅Ρ‚ Β«Π΄Π°Β» ΠΈΠ»ΠΈ Β«Π½Π΅Ρ‚Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ доступныС систСмныС элСмСнты мСню для Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ ячСйки. iOS пытаСтся вывСсти контСкстноС мСню для Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΉ ячСйки, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эту ячСйку ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 1 с. Π—Π°Ρ‚Π΅ΠΌ iOS пытаСтся ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄, ΠΎΠ΄Π½Π° ΠΈΠ· ячССк ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π»Π° появлСниС контСкстного мСню Π½Π° экранС. Если Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚, Ρ‚ΠΎ iOS сообщит Π΅ΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² контСкстном мСню, Π° Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ смоТСт ΡƒΡ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². НапримСр, Ссли доступны ΠΏΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (элСмСнтов) ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Β«Π΄Π°Β» Π½Π° Π΄Π²Π° ΠΈΠ· Π½ΠΈΡ…, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° этих элСмСнта.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ элСмСнты мСню Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, послСдний ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π½Π° любой ΠΈΠ· этих элСмСнтов, Π»ΠΈΠ±ΠΎ Π½Π° экран Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ контСкстного мСню, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ это мСню. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ прикоснСтся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· элСмСнтов мСню, iOS ΠΏΠΎΡˆΠ»Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ сообщСниС ΠΎΡ‚ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ элСмСнт мСню Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ зависимости ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ дСйствиСм.

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ сначала Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия доступны Π² контСкстном мСню ячСйки Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ создадим Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π² Π½Π΅ΠΌ нСсколько ячССк:


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

numberOfRowsInSection:(NSInteger)section{

return 3;

}


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

cellForRowAtIndexPath:(NSIndexPath *)indexPath{


UITableViewCell *cell = nil;


cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier

forIndexPath: indexPath];


cell.textLabel.text = [[NSString alloc]

initWithFormat:@"Section %ld Cell %ld",

(long)indexPath.section,

(long)indexPath.row];


return cell;


}


β€” (void)viewDidLoad{