1

我在详细视图的导航栏右侧创建了一个向上/向下箭头分段控制按钮。在基于表格的应用程序中,如何使用这些向上/向下箭头在父表格中的单元格中移动?

苹果“NavBar”示例代码有一个示例,但控件不起作用。

iBird 程序也有这个功能,非常好用。免费下载“iBird 15”程序。

有什么想法吗?

谢谢!

4

2 回答 2

1

我已经解决了一些小问题。这是我当前的代码。它不是很优雅,但它正在工作。segmentActionPressed 是 .h 文件中的一个 NSInteger 集,我用它来指定是否使用段控件移动到下一个视图。

- (IBAction)segmentAction:(id)sender{
NSIndexPath *selectedRow = CurrentIndexPath; //CurrentIndexPath is an NSIndexPath object that holds the current indexpath.
NSIndexPath *scrollIndexPath;
self.segmentActionPressed = 1;
self.tableView.delegate = self;

if([sender selectedSegmentIndex] == 0)
{
[self.navigationController popViewControllerAnimated:NO];
    if(selectedRow.row == 0)    //If on the first row when up button is pressed, send us to the last row.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:tableDataSource.count -1 inSection:selectedRow.section]];
    }
    if(selectedRow.row > 0)     //If on any other row when up button is pressed, go to the next row above.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:selectedRow.row -1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:scrollIndexPath.row inSection:selectedRow.section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:scrollIndexPath.row inSection:selectedRow.section]];
    }
}
else if([sender selectedSegmentIndex] == 1)
{
[self.navigationController popViewControllerAnimated:NO];
    if(selectedRow.row == tableDataSource.count -1)     //If on the last row when up down is pressed, go to the first row.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:0 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:scrollIndexPath];
    }
    if(selectedRow.row < tableDataSource.count -1)      //If on any other row when up down is pressed, go to the next row below.
    {
        scrollIndexPath = [NSIndexPath indexPathForRow:selectedRow.row +1 inSection:selectedRow.section];
        [self.tableView selectRowAtIndexPath:scrollIndexPath animated:NO scrollPosition:UITableViewScrollPositionMiddle];
        [self tableView:self.tableView didSelectRowAtIndexPath:scrollIndexPath];
    }
}}

在我的 -didSelectRowAtIndexPath 方法中,如果使用向上/向下箭头,我使用以下代码移动到没有动画的下一个视图。

if (segmentActionPressed == 0)
    {
    [self.navigationController pushViewController:tvc animated:YES];
    }
else if (segmentActionPressed == 1)
    {
    [self.navigationController pushViewController:tvc animated:NO];
    }

最后,我设置下面的代码在父视图出现时将segmentActionPressed设置为“0”。我还在此处取消选择该行,以便您在移回父视图时可以看到选择了哪一行。

- (void)viewWillAppear:(BOOL)animated {
self.segmentActionPressed = 0;
[self.tableView deselectRowAtIndexPath:CurrentIndexPath animated:YES];}

主要问题是分段按钮永远不会被按下,并且在触摸时立即发送动作,而不是在释放按钮时,就像“触摸内部”动作一样。

于 2009-08-04T16:02:03.417 回答
0

您应该可以通过在与分段控件关联的操作中调用 selectRowAtIndexPath:animated:scrollPosition 来执行此操作

于 2009-07-24T22:32:36.790 回答