【问题标题】:‘static‘ UIButton ontop UIScrollview?UIScrollview 上的“静态”UIButton?
【发布时间】:2011-03-31 07:05:52
【问题描述】:

我想实现一个相当简单的效果。滚动视图和其上方的静态按钮。 到目前为止没有问题。不幸的是,如果我想“通过”按钮滚动视图,就会出现问题。所以开始在按钮内部拖动会影响按钮,而不是滚动视图。

关于如何实现这一目标的任何想法?

非常感谢!

我认为这种方法行不通,因为 touchesBegan 在 UIScrollView 中已被弃用……(此信息是否属实?)

不是解决方案:-)

@implementation MySuperButton

+ (id)buttonWithFrame:(CGRect)frame {
    return [[[self alloc] initWithFrame:frame] autorelease];
}

- (id)initWithFrame:(CGRect)frame {
    if (self == [super initWithFrame:frame]) {
        NSLog(@"initWithFrame");
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    [self.nextResponder touchesBegan:touches withEvent:event];
    NSLog(@"[self nextResponder]: %@", [self nextResponder]);
}

@end

不幸的是,这还不起作用。我认为下一个响应者是我的 UIView 而不是我的 UIScrollView。有什么想法吗?

如果我的视图控制器(即 nextResponder)将触摸传递给滚动视图,则什么也不会发生。

【问题讨论】:

  • 你说的上面是指垂直还是在上面?
  • 我的意思是最重要的。很抱歉造成误解。
  • 你需要指定你想要的行为。 Eiko 在 4 月 4 日问了你这个问题,从那时起你就一直在网上离开 cmets,但你仍然没有回答。
  • @rdesign 你解决了这个问题吗?大多数答案的作者都没有正确理解你......

标签: iphone uiscrollview uibutton touches


【解决方案1】:

将按钮添加到滚动视图而不是其父视图,一切都应该正常工作。直接对按钮的触摸将传递给按钮,而对背景(滚动视图)的触摸将传递给滚动视图。

由于按钮不是滚动视图的子视图,因此它不会随背景移动(我想您的意思是 static)。

【讨论】:

  • 这能解决您的问题还是我误读了您的问题?如果触摸按钮(滚动或不滚动)会发生什么?
  • +1 如果他不希望它滚动,这是正确的,但也许他希望它滚动。我不明白为什么他还没有具体说明他所追求的行为。
【解决方案2】:

我从来没有玩过触摸事件等,但无论如何我都会尝试帮助我的基本理解。

尝试将按钮的exclusiveTouch 设置为NO。不确定,但也可能 enableMultitouch 为 YES。

如果这不起作用,我会尝试子类化 UIButton,覆盖触摸事件并在 [super touchEventX:] 之前/之后将它们传递给 [self nextResponder]?

【讨论】:

  • 感谢您的帮助。这对我来说听起来有点复杂,因为我也从来没有玩过很多触摸事件 :-) 我会试一试的。
  • @resign 我也会尝试对 touchesEnded 和 touchesMoved 做同样的事情。将 ExclusiveTouch 设置为 NO 是否也有任何改变?
  • @rdesign 试试 scrollView.delaysContentTouches = YES; scrollView.canCancelContentTouches = YES;这是一个关于同一件事的问题:stackoverflow.com/questions/650437/…
【解决方案3】:

有点难以理解您想要实现的目标。是否要滚动按钮?

所以在按钮内部开始拖动会影响按钮,而不是滚动视图。

不清楚这是你想要的行为还是你想要改变的行为。

如果是前者,Eiko 的答案是正确的,如果是后者,则应将按钮添加为滚动视图的子视图,并在调用 scrollViewDidScroll: 时更新其框架。我从未尝试过,但理论上可行。

【讨论】:

    【解决方案4】:

    将整个 Scroll View 向下移动 Button 的高度,并将其高度缩小相同的量。然后将您的 Button 放在 Scroll View 上方 - 所以它不是 Scroll View 的子项。

    【讨论】:

    • 感谢您的回答。不幸的是,我以错误的方式描述了它。我的意思是在它之上。所以按钮应该在滚动视图的顶部。滚动视图仍应识别触摸,按钮接收。该按钮应仅在 touchdowninside 时触发。
    • 所以你想要一个触摸来影响两个不同的对象?这听起来像是一个糟糕的界面创意......按钮的原因是什么?
    • 我想做一个菜单。就像有一瓶酒(按钮)。你可以滑动背景来选择你想在里面还是外面找一个地方喝它(明白了吗?)
    【解决方案5】:

    如果您在 视图 中添加简单按钮,那么如果您触摸按钮。它会调用它的 Action。

    同理

    如果您在 ScoolView 中添加简单按钮,那么如果您触摸按钮。它会调用它的 Action。

    如果你触摸 scoolview 的空白区域,则调用 UIScrollView 的委托方法。

    如果您将手指放在按钮上并拖动,它将明显影响滚动视图。滚动视图将拖动 100%

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2013-03-26
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多