第一次点击时没有调用UITableView didSelectRowAtIndexPath

时间:2012-02-01 14:08:12

标签: uitableview ios5 didselectrowatindexpath

我遇到了UITableView的ios 5的didSelectRowAtIndexPath问题,这在ios 4中是正确的。

第一次点击表格中的任何一行时,该方法不会被调用。一旦我选择了另一行,它就会调用didSelectRowAtIndexPath,但会传递最后一个indexPath。

我已经设置了tableView.delegate,它可以在ios4中正确运行。

MainView.xib
UITabBarController
     --UINavigationController
         --**UITableViewController**

有什么建议吗?

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

- (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] autorelease];
    }
    cell.textLabel.text = [[NSString alloc]initWithFormat:@"%d",indexPath.row];
    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"%d",indexPath.row);
}

7 个答案:

答案 0 :(得分:34)

您可能已实施(请注意取消选择):didDeselectRowAtIndexPath

...因此在选择取消选择第一个单元格的新单元格时触发,并将indexPath记录为第一个单元格。

解决方案: didSelectRowAtIndexPath

是的,它们看起来非常相似,didDeselectRowAtIndexPath是Xcode的自动完成功能在大多数情况下选择的第一种方法无效。

完整代码:

// right
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}

答案 1 :(得分:1)

请尝试将-viewDidLoad更改为以下代码(插入最后一行)。告诉我结果。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.tableView reloadData];
}

答案 2 :(得分:1)

我不确定这是否已得到解答,但我正在解决这个问题,就像上面评论的“Anna Karenina”一样。确保密切关注细节。

这是您实施DEselect

的原因
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

这将导致第一次点击不起作用,但点击后跟随任何其他单元格将按预期工作。

解决方案:请务必注意并使用didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

希望有帮助,就像我之前提到的那样,“Anna Karenina”解决了这个问题

答案 3 :(得分:0)

请将代理从Xib连接到文件所有者。然后尝试它会工作。

答案 4 :(得分:0)

viewDidLoad 方法

中添加此代码
[self.tableView reloadData]

答案 5 :(得分:0)

我在故事板内部的视图上有一个UIGestureRecognizer。我不得不将其移除,并且正常工作。

答案 6 :(得分:0)

将数据传递给另一个VC时,我也遇到了这个问题。我通过切换到表VC中的手动segue到详细VC来解决它。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        selectedData = data[indexPath.row]

        performSegue(withIdentifier: "Detail", sender: self)
}