在button action中,获取button的所属cell的indexPath:

1
2
3
4
5
6
7
- (IBAction)buttonAction:(id)sender {
UIButton *button = (UIButton *)sender;
CGPoint buttonOriginInTableView = [button convertPoint:CGPointZero toView:tableView];
NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:buttonOriginInTableView];
// do something
}

UIButton的”Touch Down”事件的延迟

这是因为UIScrollView有一个delaysContentTouches的属性。

cell里经常会包含一些scroll view,iOS7中UITableViewCells也包含一个自己的scroll view,我们要把这些所有的scroll view的delaysContentTouches属性都设置一下。

我们要做的是:

1. 设置tableView

1
self.tableView.delaysContentTouches = NO;

2. 为了支持iOS7,在我们初始化UITableViewCell的时候,如在“initWithStyle:reuseIdentifier:”消息中:

1
2
3
4
5
6
7
8
for (UIView *currentView in self.subviews)
{
if([currentView isKindOfClass:[UIScrollView class]])
{
((UIScrollView *)currentView).delaysContentTouches = NO;
break;
}
}

很不幸,这不是100%永久可用的方案,因为苹果将来可能会更改cell内部的view的层级(也许我们还有其它的办法,比如可以把scroll view的层级调到下面等等),但是在苹果没有以某种方式向开发者提供cell内部类的布局管理的方案之前,这个应该是我们所能做到的最好的方案了。