单击屏幕左边缘上的按钮时不突出显示,但触发事件

时间:2017-03-07 03:13:27

标签: ios

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 20, 400, 200)];
    [btn setTitle:@"123" forState:UIControlStateNormal];
    [btn setTitle:@"234" forState:UIControlStateHighlighted];
    [btn setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [btn setBackgroundColor:[UIColor grayColor]];
    [btn addTarget:self action:@selector(test11) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
}

- (void)test11 {
    NSLog(@"xxxxxxxxxxxxxx");
}

当我点击屏幕左侧的按钮时,test11正在运行,但不是高亮。当我单击另一个区域中的按钮时,test11正在工作并且正在高亮。不同的设备和iOS版本的行为有所不同:

  • iPhone 6s plus:不用iOS 9.2.2和9.3.2突出显示
  • iphone 7:没有突出显示
  • iphone 6 plus:用iOS 10.1突出显示
  • 所有模拟器都是highLighting

1 个答案:

答案 0 :(得分:0)

我理解问题是当您点按按钮的最左侧时,它没有显示触控高亮显示?

这是因为按钮上的触控处理与屏幕边缘手势识别器冲突,因此在点击完成之前不会转换为识别状态。

如果你想一想:

  1. 用户触摸手指,可以是水龙头或屏幕边缘平底锅。
  2. 用户按住手指(这里你想要触摸高亮显示),仍然不确定触摸是点击还是平移(用户仍然可以横向平移)
  3. 用户释放手指,系统现在知道触摸是一个水龙头,因此可以为它触发事件。 3。
  4. 检查您的层次结构中其他识别器处于活动状态,如果您有UINavigationController,则默认情况下它具有左侧屏幕边缘识别器用于后退手势。这通常是这个问题的罪魁祸首。您可以根据需要禁用此识别器,或者实施它的委托以使其与您的按钮一起玩。