Rah*_*yas 8 iphone cocoa-touch objective-c
我有自定义单元格的tableview.该表分为许多部分和行.我在单元格上有一个自定义按钮.现在我想在点击该按钮时获得节号和行号.对此有任何想法
Jim*_*vey 26
您需要在视图控制器上实现UIControl事件处理方法,并将其设置为所有按钮的处理程序.即在你的-tableView:cellForRowAtIndexPath:功能中你会做类似的事情:
[theCell.button addTarget: self
action: @selector(buttonPressed:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
然后您的事件处理程序将如下所示:
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event
{
UITouch * touch = [[event touches] anyObject];
CGPoint location = [touch locationInView: self.tableView];
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location];
/* indexPath contains the index of the row containing the button */
/* do whatever it is you need to do with the row data now */
}
Run Code Online (Sandbox Code Playgroud)
一些想法:
您可以遍历按钮的超级视图层次结构,直到找到UITableViewCell,然后在UITableView上调用 - (NSIndexPath*)indexPathForCell:(UITableViewCell*)单元格.
- (void)buttonClicked:(id)sender {
UIView *button = sender;
for (UIView *parent = [button superview]; parent != nil; parent = [parent superview]) {
if ([parent isKindOfClass: [UITableViewCell class]]) {
UITableViewCell *cell = (UITableViewCell *) parent;
NSIndexPath *path = [self.tableView indexPathForCell: cell];
// now use the index path
break; // for
}
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用按钮的标记来存储引用该行的索引.这只包含一个整数,因此当您有一个部分时,或者当您将行作为平面列表进行管理时,它最有意义.
您可以替代地将UITableViewCell子类化以封装按钮.您的UITableViewCell可以响应按钮事件并将事件重新广播给自己的委托,传递自我.然后,事件委托可以在UITableView上调用 - (NSIndexPath*)indexPathForCell:(UITableViewCell*)单元格来获取索引路径.
在tableView中选择单元格时,将调用以下方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
访问部分编号: int section = indexPath.section;
访问行号(在正确的部分内): int row = indexPath.row;
| 归档时间: |
|
| 查看次数: |
10443 次 |
| 最近记录: |