我正在尝试达到以下效果:
到目前为止,我有一个可以监听单击的工作函数:
- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {
CGPoint p = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
if(indexPath != nil) {
[self.tableView beginUpdates];
*Call heightForRowAtIndexPath here?*
[self.tableView endUpdates];
}
}
我的heightForRowAtIndexPath
:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"runs");
return 64;
}
据我在网上不同网站的帮助下,我必须在[self.tableView beginUpdates]
和[self.tableView endUpdates]
之间以某种方式调用该函数。
但是我该怎么做?我对Xcode或Objective C并不熟悉,所以我们将不胜感激!
提前致谢。
亚历山大。
答案 0 :(得分:5)
您不要自己致电tableView:heightForRowAtIndexPath:
。 tableView将调用它。 tableView将在向其发送endUpdates
后调用该方法。在调用tableView:heightForRowAtIndexPath:
后,您必须从handleSingleTap:
返回不同的值。
您可以通过在属性(或实例变量)中保存扩展的indexPath,并在请求的indexPath与保存的扩展indexPath匹配时在tableView:heightForRowAtIndexPath:
中返回不同的值来执行此操作。
e.g。
@property (strong, nonatomic) NSIndexPath *expandedIndexPath;
- (void)handleSingleTap:(UITapGestureRecognizer *)gestureRecognizer {
CGPoint p = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];
if(indexPath != nil) {
self.expandedIndexPath = indexPath;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"runs");
if (self.expandedIndexPath && [indexPath isEqual:self.expandedIndexPath]) {
// expanded cell
return 200;
}
else {
return 64;
}
答案 1 :(得分:0)
如果您致电[self.tableView reloadRowsAtIndexPaths:@[yourIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
,则会适当调用行的高度。 <是/>
如果您调用上述方法,则无需[self.tableView beginUpdate], [self.tableView endUpdate]