当行不可见时,以编程方式在tableview中选择行

时间:2014-02-28 08:53:46

标签: ios xcode uitableview

我必须在tableview中逐个选择单元格并“执行”此行以显示其detailviewcontroller。我使用以下代码。只要在屏幕上可以看到要执行的下一行,一切都按预期工作。用户必须手动滚动到此单元格而不是执行红色区域中的下一个单元格。

任何帮助

- (void)showNextExercise:(NSNumber *)nextOne{
int nextRow = [(NSNumber *)nextOne intValue];
NSLog(@"Next Row: %i", nextRow);


//Auto Start next Exercise //
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:nextRow inSection:0];



if ([self.tableView.delegate respondsToSelector:@selector(tableView:willSelectRowAtIndexPath:)]) {
    [self.tableView.delegate tableView:self.tableView willSelectRowAtIndexPath:indexPath];
}

//[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition: UITableViewScrollPositionNone];

[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

if ([self.tableView.delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) {
    [self.tableView.delegate tableView:self.tableView didSelectRowAtIndexPath:indexPath];
}


[self performSelector:@selector(performSelectorWithDelay) withObject:nil afterDelay:0.2];

//END Auto Start next Exercise //
}



-(void)performSelectorWithDelay{
    [self performSegueWithIdentifier:@"showDetail" sender:nil];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{


    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

    if (![executedExercises containsObject:[NSString stringWithFormat:@"%@", [[object valueForKey:@"timeStamp"] description]]]) {
        [executedExercises addObject:[NSString stringWithFormat:@"%@",[[object valueForKey:@"timeStamp"] description]]];

    }    
    [autoExecutedExercises addObject:[NSString stringWithFormat:@"%@",[[object valueForKey:@"timeStamp"] description]]];
    //[autoExecutedExercises addObject:[NSNumber numberWithLong:indexPath.row]];

    if (indexPath.row == 0) {
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        long warmUpTime = [userDefaults integerForKey:@"WarmUpBackup"];
        NSLog(@"warmupBackUp: %li", warmUpTime);


    }

}

Red Zone Image

2 个答案:

答案 0 :(得分:0)

你在tableView中做了什么:didSelectRowAtIndexPath?由于重用单元机制,如果您尝试在tableView:didSelectRowAtIndexPath中获取它们,则可能不存在不可见单元格。

答案 1 :(得分:0)

不要滥用UI系统。您不需要告诉表视图委托一个单元格,然后点击,您可以直接显示您需要的视图控制器(调用显示的方法而不会打扰委托)。

您拥有进入表格视图的数据,您应该直接使用它。通过UI代码汇集所有内容是代码中的负担,知识和交叉耦合的应用,应该没有。

如果要将表行显示为选中,请在数据模型中为所选项设置一个标志(带滚动/重新加载表)。现在,当表格刷新时,您可以标记单元格。