首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在UIScrollView中,UIButton不起作用

在UIScrollView中,UIButton不起作用
EN

Stack Overflow用户
提问于 2013-05-20 20:33:34
回答 8查看 28.6K关注 0票数 21

我的视图结构:

代码语言:javascript
复制
UITableView
  UITableViewCell
    UIScrollView
      CustomView
        UIButton

问题是,当我触摸UIButton时,它不工作。我用代码创建它:

代码语言:javascript
复制
btn = [[UIButton alloc] init];
[btn setImage:image forState:UIControlStateNormal];
[btn addTarget:self action:@selector(tileTouchUpInside) forControlEvents:UIControlEventTouchUpInside];
btn.layer.zPosition = 1;
[self addSubview:btn];

我还添加了以下内容:

代码语言:javascript
复制
scroll.delaysContentTouches = NO;
scroll.canCancelContentTouches = NO;

但我的按钮无论如何都不能用。我无法为UITableView设置延迟或设置延迟,因为如果我设置了它,UITableView将停止垂直滚动。

谢谢你的帮助!

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-05-20 21:26:45

使用创建UIScrollview的子类

代码语言:javascript
复制
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
  return NO;
}

如果您没有收到该消息,请设置:

代码语言:javascript
复制
scrollView.delaysContentTouches = NO;

问题是由于touchesShouldCancelInContentView默认的行为方式,仅当子视图是UIControl时,它才返回NO,但您的按钮隐藏在CustomView中,而不是。

票数 22
EN

Stack Overflow用户

发布于 2013-05-21 18:11:38

也遇到了同样的情况。在单独的类中添加UIScrollView,并通过自定义视图添加按钮。“NSNotificationCenter”帮助我解决了这个问题。示例代码:

代码语言:javascript
复制
-(void)tileTouchUpInside:(id)sender
{    
    NSDictionary *dict=[NSDictionary dictionaryWithObject:@"index" forKey:@"index"];

    [[NSNotificationCenter defaultCenter]postNotificationName:@"Action" object:nil userInfo:dict];
}

在包含滚动视图的类中:

代码语言:javascript
复制
- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doAction:) name:@"Action" object:nil];
}
-(void)doAction:(NSNotification *) notification
{
    NSString* value =[notification.userInfo valueForKey:@"index"];
    // .......
}

为滚动视图、自定义视图和按钮启用userInteraction。

票数 4
EN

Stack Overflow用户

发布于 2013-05-20 21:06:23

我想你需要设置按钮框。默认情况下,如果你使用btn = [[UIButton alloc] init];方法初始化按钮,它将是UIButtonTypeCustom。为了调试的目的,还要给它设置一个背景色,以便记下按钮实际放置的位置。现在,对于您的情况,您需要设置该按钮的框架,如btn.frame = CGRectMake(0,0,100,100);

对于内部UIScrollView,实现此委托方法。

代码语言:javascript
复制
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
  {
       return ![view isKindOfClass:[UIButton class]];
  }

这可能行得通。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16649639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档