我遇到了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);
}
答案 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)
}