我的视图结构:
UITableView
UITableViewCell
UIScrollView
CustomView
UIButton
问题是,当我触摸UIButton时,它不工作。我用代码创建它:
btn = [[UIButton alloc] init];
[btn setImage:image forState:UIControlStateNormal];
[btn addTarget:self action:@selector(tileTouchUpInside) forControlEvents:UIControlEventTouchUpInside];
btn.layer.zPosition = 1;
[self addSubview:btn];
我还添加了以下内容:
scroll.delaysContentTouches = NO;
scroll.canCancelContentTouches = NO;
但我的按钮无论如何都不能用。我无法为UITableView设置延迟或设置延迟,因为如果我设置了它,UITableView将停止垂直滚动。
谢谢你的帮助!
发布于 2013-05-20 21:26:45
使用创建UIScrollview的子类
- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return NO;
}
如果您没有收到该消息,请设置:
scrollView.delaysContentTouches = NO;
问题是由于touchesShouldCancelInContentView
默认的行为方式,仅当子视图是UIControl时,它才返回NO,但您的按钮隐藏在CustomView中,而不是。
发布于 2013-05-21 18:11:38
也遇到了同样的情况。在单独的类中添加UIScrollView,并通过自定义视图添加按钮。“NSNotificationCenter”帮助我解决了这个问题。示例代码:
-(void)tileTouchUpInside:(id)sender
{
NSDictionary *dict=[NSDictionary dictionaryWithObject:@"index" forKey:@"index"];
[[NSNotificationCenter defaultCenter]postNotificationName:@"Action" object:nil userInfo:dict];
}
在包含滚动视图的类中:
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doAction:) name:@"Action" object:nil];
}
-(void)doAction:(NSNotification *) notification
{
NSString* value =[notification.userInfo valueForKey:@"index"];
// .......
}
为滚动视图、自定义视图和按钮启用userInteraction。
发布于 2013-05-20 21:06:23
我想你需要设置按钮框。默认情况下,如果你使用btn = [[UIButton alloc] init];
方法初始化按钮,它将是UIButtonTypeCustom
。为了调试的目的,还要给它设置一个背景色,以便记下按钮实际放置的位置。现在,对于您的情况,您需要设置该按钮的框架,如btn.frame = CGRectMake(0,0,100,100);
对于内部UIScrollView,实现此委托方法。
- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
return ![view isKindOfClass:[UIButton class]];
}
这可能行得通。
https://stackoverflow.com/questions/16649639
复制相似问题