我想知道如何在选择单元格时获取所选单元格的行索引。但是如何在不使用UITableViewDelegate
方法的情况下执行此操作。
请告诉我。
我有搜索很多,但没有得到解决方案,所以如果有人知道请告诉我。
请分享关于它的观点。
提前致谢...... !!!
答案 0 :(得分:1)
在这种情况下,您的面试官想知道如何自己实施代表团......
要实现这一点,请创建从UITableViewCell
扩展的自定义类“YourTableViewCell”,并使用此类对象在-tableView:cellForRowAtIndexPath:
使用方法
编写协议“CellSelectionProtocol
”
-(void) cellSelected: (YourTableViewCell *) cell;
现在将此协议委托给具有TableView的ViewController 并定义方法的实现如下 -
-(void) cellSelected: (YourTableViewCell *) cell
{
NSIndexPath *selectedIndexPath = [_yourTableView indexPathForCell: cell];
}
如果是面试,我的答案就是这个,而且我很确定它会被接受。
但是对于一个好的架构......协议&代表实施应该分为两个层次,如 - >
YourTableViewCell - > 代表 -cellSelected: - > YourTableView - > 代表 -tableView:didSelectRowAtIndexPath:
- > YourViewController
请参阅:您的采访者只是想知道如何手动创建代理,而不是使用默认的UITableViewDelegates。
编辑 @ Unheilig
我的意思是2级,因为UITableViewCell
的选择必须委托给UITableView
,而不是直接委托给控制器,原因如下
UITableViewCell
是UITableView
UITableView
。因此,如果您直接委托单元格选择,您将如何告诉控制器已为哪个UITableView
对象选择了单元格?UITableView
可能需要与其他UITableViewCell
进行其他处理,如果选择并更改backgroundColor,则应取消选择之前选择的并获取默认的backgroundColor。如果启用了多个选择,则添加到所选单元格的数组中。有许多类似的建筑必需品让我说 - “但是对于一个好的架构......协议和代表实现应该分为两个层次,比如 - >”
我希望现在很有说服力......
答案 1 :(得分:-3)
无法使用tableview委托方法获取选定的单元格行索引。
当你点击tableview时,调用didSelectRowAtIndexPath并获取tableview单元格索引。
有一种方法可以做到这一点,但获取tableview单元格索引不是正确的过程。在tableviewcell上创建一个按钮,并将indexvalue作为sender标签传递给按钮操作。但是只需要点击那个按钮。
回答编辑:
在cellForRowAtIndexPath方法中的tableview单元格上创建一个透明按钮,并将单元格索引传递给按钮标记。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height);
button.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.0];
[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
button.tag = indexPath.row;
[cell addSubview:button];
cell.textLabel.text = [NSString stringWithFormat:@"%@",[numberArray objectAtIndex:indexPath.row]];
return cell;
}
-(void)buttonClicked:(id)sender
{
NSLog(@"%ld",(long)[sender tag]);
}