私は本当にこの場合について1週間で立ち往生しました。 iはUINavigationItem内部UIBarButtonItemを持って、階層がこのtouchesBeganとtouchesEndedが別のサブビューで検出されました
のようなものですBarButtonItemはsegmentedControlのラッパーです。 UIBarbuttonitemおよびUIsegmentedControlはプログラムによって作成されますが、その他はIBで作成されます。
この場合、barbuttonitemを押すか、またはタッチした後で表示したいと思います。このフォーラムで読んだいくつかのスレッドでは、UIBarbuttonItemがUIResponderを継承していないことを知っていたので、NavigationBarを選択してタッチを取得し、フレームを定義します。
これは私が作ったコードは次のとおり
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
navBar = self.navigationController.navigationBar;
int index = _docSegmentedControl.selectedSegmentIndex;
NSLog(@"index di touches began : %d", index);
CGFloat x;
if (index == 0) {
x = 0.0;
}else if (index == 1) {
x = widthSegment + 1;
}else if (index == 2) {
x = 2*widthSegment + 1;
}else if (index == 3) {
x = 3*widthSegment+ 1;
}else if (in dex == 4) {
x = 4*widthSegment + 1;
}
CGRect frame = CGRectMake(x, 0.00, widthSegment, 46.00);
UITouch *touch = [touches anyObject];
CGPoint gestureStartPoint = [touch locationInView:navBar];
NSLog(@"gesturestart : %f, %f", gestureStartPoint.x, gestureStartPoint.y);
if (CGRectContainsPoint(frame, gestureStartPoint)) {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(segmentItemTapped:) object:[self navBar]];
NSLog(@"cancel popover");
}
}
ナビゲーションバーはmyViewController.hに宣言し、私はIBOutletとして設定しました。
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
int index = _docSegmentedControl.selectedSegmentIndex;
NSLog(@"index di touches ended : %d", index);
navBar = self.navigationController.navigationBar;
CGFloat x;
if (index == 0) {
x = 0.0;
}else if (index == 1) {
x = widthSegment + 1;
}else if (in dex == 2) {
x = 2*widthSegment + 1;
}else if (index == 3) {
x = 3*widthSegment+ 1;
}else if (index == 4) {
x = 4*widthSegment + 1;
}
CGRect frame = CGRectMake(x, 0.00, widthSegment, 46.00);
UITouch *touch = [touches anyObject];
CGPoint gestureLastPoint = [touch locationInView:navBar];
NSLog(@"lastPOint : %d", gestureLastPoint);
if (CGRectContainsPoint(frame, gestureLastPoint)) {
if (touch.tapCount <= 2) {
[self performSelector:@selector(segmentItemTapped:) withObject:nil afterDelay:0.0];
}
}
}
touchesBeganとtouchesEndedは、ツールバーでタップしたときに検出されました。ナビゲーションバーでは検出されませんでした。
私はこのようなHitTestメソッドを実装しました:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *touchedView = [super hitTest:point withEvent:event];
NSSet* touches = [event allTouches];
// handle touches if you need
return touchedView;
}
が、それはまだ何も良くありません。
これがなぜ起こるのか誰かが解説できますか? よろしく
-Risma-
THXなどのbarbutton項目にアクションを追加することができますが、それは私の問題を解決することはできません、segmentItemTapアクションがためのアクションですあなたのコードを試してみたら、ポップオーバーは来なかった、私は検出されなかったタッチについて考えていたビーガンとタッチ私のnavbarEnded、あなたはなぜ知っていますか? –