背景是這樣的:
我們的UI界面一般會(huì)在一個(gè)界面同時(shí)寫很多的控件犀呼,并且同時(shí)可見,并且有很多的控件都會(huì)同時(shí)有點(diǎn)擊事件。
舉個(gè)栗子:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 創(chuàng)建按鈕組
for (NSInteger i = 0; i < 16; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.tag = 100+i;
btn.backgroundColor = [UIColor greenColor];
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
btn.frame = CGRectMake(30+(i%4)*70, 100+(i/4)*70, 60, 60);
[btn setTitle:[NSString stringWithFormat:@"按鈕%ld",i] forState:UIControlStateNormal];
[self.view addSubview:btn];
}
// 創(chuàng)建可以點(diǎn)擊的View
UIView *touchView = [[UIView alloc] initWithFrame:CGRectMake(100, 400, 100, 100)];
touchView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:touchView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickTap:)];
[touchView addGestureRecognizer:tap];
touchView.exclusiveTouch = YES;
}
#pragma mark- 手勢控件點(diǎn)擊事件
- (void)clickTap:(UITapGestureRecognizer *)sender
{
NSLog(@"點(diǎn)擊了 touchView");
}
#pragma mark- 按鈕的點(diǎn)擊事件
- (void)clickBtn:(UIButton *)sender
{
NSLog(@"sender.tag ===== %ld",sender.tag);
}
按鈕組的按鈕多個(gè)是可以同時(shí)點(diǎn)擊響應(yīng)的砰盐,按鈕組中的按鈕和下面的touchView也是可以同時(shí)點(diǎn)擊響應(yīng)的。發(fā)揮你的想象在實(shí)際的工作中坑律,如果類似這樣的情況出現(xiàn)岩梳,同時(shí)響應(yīng)多套邏輯,可能沒有影響晃择,也可能是很可怕的冀值。
問題來了,怎么保證同時(shí)點(diǎn)擊多個(gè)控件宫屠,只讓首個(gè)被觸發(fā)的控件相應(yīng)呢列疗?
為每個(gè)控件設(shè)置標(biāo)識(shí)也不現(xiàn)實(shí),并且響應(yīng)如此之快浪蹂。
這個(gè)時(shí)候可以考慮下exclusiveTouch屬性了抵栈。
看一下蘋果的相關(guān)解釋:
大致理解:如果設(shè)置為YES告材,會(huì)使得在同一時(shí)間同時(shí)點(diǎn)擊的其他控件的響應(yīng)事件受到阻塞。默認(rèn)的情況下是NO竭讳。
更通俗的講就是创葡,有一個(gè)View的exclusiveTouch屬性是YES,那么當(dāng)有人點(diǎn)擊他的時(shí)候绢慢,他就獨(dú)霸了整個(gè)touch事件灿渴,再點(diǎn)擊其他的控件不管用。在手離開這個(gè)View之前胰舆,之前點(diǎn)擊其他的View是無效的骚露。
只要將有機(jī)會(huì)同時(shí)點(diǎn)擊的控件的exclusiveTouch屬性都設(shè)置為YES的話,那么這個(gè)問題就愉快的解決了缚窿。
btn.exclusiveTouch = YES;
*** touchView.exclusiveTouch = YES;***
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 創(chuàng)建按鈕組
for (NSInteger i = 0; i < 16; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.tag = 100+i;
btn.backgroundColor = [UIColor greenColor];
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
btn.frame = CGRectMake(30+(i%4)*70, 100+(i/4)*70, 60, 60);
[btn setTitle:[NSString stringWithFormat:@"按鈕%ld",i] forState:UIControlStateNormal];
[self.view addSubview:btn];
btn.exclusiveTouch = YES;
}
// 創(chuàng)建可以點(diǎn)擊的View
UIView *touchView = [[UIView alloc] initWithFrame:CGRectMake(100, 400, 100, 100)];
touchView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:touchView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickTap:)];
[touchView addGestureRecognizer:tap];
touchView.exclusiveTouch = YES;
}
如有失誤請(qǐng)各位路過大神即時(shí)指點(diǎn)棘幸,或有更好的做法,也請(qǐng)指點(diǎn)一二倦零,在下感激不盡误续。