Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使未剪辑的子视图接收触摸事件?_Iphone_Objective C_Cocoa Touch_Uibutton - Fatal编程技术网

Iphone 如何使未剪辑的子视图接收触摸事件?

Iphone 如何使未剪辑的子视图接收触摸事件?,iphone,objective-c,cocoa-touch,uibutton,Iphone,Objective C,Cocoa Touch,Uibutton,我有一个小的自定义视图,用作按钮。我使用一个简单的UIButtonTypeCustom实现了这一点,我将其作为视图边界上的子视图包含。但是,由于视图很小,我想增加命中目标的大小。通过将“我的按钮”的边框设置为大于自定义视图的边框,并将clipstobunds设置为“否”,这很容易做到(人们会认为)。这对视觉效果有效(自定义按钮在父视图外绘制),但它不会在父视图外的区域接收toucupinside事件。如何使按钮接收touchUpInside事件 - (id) initWithFrame: (CG

我有一个小的自定义视图,用作按钮。我使用一个简单的
UIButtonTypeCustom
实现了这一点,我将其作为视图边界上的子视图包含。但是,由于视图很小,我想增加命中目标的大小。通过将“我的按钮”的边框设置为大于自定义视图的边框,并将
clipstobunds
设置为“否”,这很容易做到(人们会认为)。这对视觉效果有效(自定义按钮在父视图外绘制),但它不会在父视图外的区域接收
toucupinside
事件。如何使按钮接收
touchUpInside
事件

- (id) initWithFrame: (CGRect) frame {
  if (self = [super initWithFrame: frame]) {
    self.backgroundColor = [UIColor clearColor];
    self.clipsToBounds = NO;

    // ... various image views and labels ...

    UIButton *touchArea = [UIButton buttonWithType: UIButtonTypeCustom];
    touchArea.backgroundColor = [UIColor colorWithRed: 1 green: 0 blue: 0 alpha: .3]; // so I can see the bounds
    CGRect touchAreaFrame = self.bounds;
    CGFloat checkboxHitTargetExtension = 7;
    touchAreaFrame.origin.y -= checkboxHitTargetExtension;
    touchAreaFrame.size.height += (checkboxHitTargetExtension * 2);
    touchArea.frame = touchAreaFrame;
    [self addSubview: touchArea];

    // ... add listeners etc ...
  }
  return self;
}

使按钮不是视图的子对象,而是视图的同级对象,并放置在其顶部,这样按钮的触摸就不会出现剪切问题。

您可以使用pointInside:withEvent:定义特定点是否在视图的“内部”。有关更多信息,请参阅UIView参考


另外,签出CGRect Offset使CGRect变大非常方便。

并不是我不能做到这一点,我只是想从总体上解决这一特殊问题,以便在我的视图中更好地划分区域!这正是我需要的。在对按钮框进行计算后,我可以返回YES,然后它是金色的。