我在详细视图的导航栏右侧创建了一个向上/向下箭头分段控制按钮。在基于表格的应用程序中,如何使用这些向上/向下箭头在父表格中的单元格中移动?
苹果“NavBar”示例代码有一个示例,但控件不起作用。
iBird 程序也有这个功能,非常好用。免费下载“iBird 15”程序。
有什么想法吗?
谢谢!
我在详细视图的导航栏右侧创建了一个向上/向下箭头分段控制按钮。在基于表格的应用程序中,如何使用这些向上/向下箭头在父表格中的单元格中移动?
苹果“NavBar”示例代码有一个示例,但控件不起作用。
iBird 程序也有这个功能,非常好用。免费下载“iBird 15”程序。
有什么想法吗?
谢谢!
我已经解决了一些小问题。这是我当前的代码。它不是很优雅,但它正在工作。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];}
主要问题是分段按钮永远不会被按下,并且在触摸时立即发送动作,而不是在释放按钮时,就像“触摸内部”动作一样。
您应该可以通过在与分段控件关联的操作中调用 selectRowAtIndexPath:animated:scrollPosition 来执行此操作