如何在不使用iOS中的UITableViewDelegate方法的情况下选择哪个UITableViewCell

时间:2015-04-08 06:23:56

标签: ios objective-c uitableview delegates

我想知道如何在选择单元格时获取所选单元格的行索引。但是如何在不使用UITableViewDelegate方法的情况下执行此操作。 请告诉我。 我有搜索很多,但没有得到解决方案,所以如果有人知道请告诉我。 请分享关于它的观点。

提前致谢...... !!!

2 个答案:

答案 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,而不是直接委托给控制器,原因如下

  • UITableViewCellUITableView
  • 的子视图
  • 控制器中可以有多个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]);
}