Очень старый вопрос, но заслуживает уточнения ИМО.
Несмотря на очень вводящую в заблуждение документацию по методу от Apple , представление "A" с набором exclusiveTouch будет препятствовать другим событиям получать события , пока A обрабатывает какое-то само событие (например, установлено кнопку с exclusiveTouch и поместите на нее палец, это предотвратит взаимодействие с другими представлениями в окне, но взаимодействие с ними будет происходить по обычной схеме после удаления пальца из элемента exlusiveTouch).
Другим эффектом является предотвращение получения события представлением A, если с каким-либо другим представлением взаимодействуют (удерживайте нажатой кнопку без установленного набора exclusiveTouch, и те, у кого исключительный Touch не будет также получать события).
Вы по-прежнему можете установить кнопку в своем представлении для exclusiveTouch и взаимодействовать с другими, но не одновременно, как докажет этот простой тест UIViewController (как только правильные привязки в IB будут установлены как для Outlets, так и для Actions) :
#import "FTSViewController.h"
@interface FTSViewController ()
- (IBAction)button1up:(id)sender;
- (IBAction)button2up:(id)sender;
- (IBAction)button1down:(id)sender;
- (IBAction)button2down:(id)sender;
@property (nonatomic, strong) IBOutlet UIButton *button1, *button2;
@end
@implementation FTSViewController
- (IBAction)button1up:(id)sender {
NSLog(@"Button1 up");
}
- (IBAction)button2up:(id)sender {
NSLog(@"Button2 up");
}
- (IBAction)button1down:(id)sender {
NSLog(@"Button1 down");
}
- (IBAction)button2down:(id)sender {
NSLog(@"Button2 down");
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Guarantees that button 1 will not receive events *unless* it's the only receiver, as well as
// preventing other views in the hierarchy from receiving touches *as long as button1 is receiving events*
// IT DOESN'T PREVENT button2 from being pressed as long as no event is being intercepted by button1!!!
self.button1.exclusiveTouch = YES;
// This is the default. Set for clarity only
self.button2.exclusiveTouch = NO;
}
@end
В свете этого единственная веская причина, по которой IMHO для Apple не устанавливать для параметра exclusiveTouch значение YES для каждого подкласса UIView, заключается в том, что это сделало бы реализацию сложных жестов настоящей PITA, включая, возможно, некоторые из жестов, к которым мы уже привыкли в составных подклассах UIView (например, UIWebView), поскольку установка выбранных представлений на exclusiveTouch = NO (кнопка «Мне нравится») быстрее, чем выполнение рекурсивного exclusiveTouch = YES практически для всего, только для включения мультитача.
Недостатком этого является то, что во многих случаях противоречащее интуитивному поведению UIButtons и UITableViewCells (среди прочего ...) может привести к странным ошибкам и сделать тестирование более сложным (как это случилось со мной, как ... 10 минут назад? :().
Надеюсь, это поможет