Я получил это работает с несколькими небольшими проблемами. Вот мой текущий код. Это не очень элегантный, но он работает. segmentActionPressed - это набор NSInteger в файле .h, который я использую, чтобы указать, был ли элемент управления сегмента использован для перехода к следующему виду.
- (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];}
Основная проблема заключается в том, что кнопки сегмента никогда не появляются прессуют и действие немедленно отправляется при прикосновении вместо того, когда кнопка отпущена, как с «подправить внутри» действия.
Как бы это назвать, используя - (IBAction) segmentAction: (id) отправитель: , когда я не могу использовать indexPath? – Jonah
Я все еще ищу ответ на эту проблему. У вас есть еще какие-то предложения о том, как реализовать selectRowAtIndexPath: анимированный: scrollPosition? Спасибо! – Jonah
Я нашел эту тему с похожим вопросом. Я еще не смог заставить его работать, но это, кажется, шаг в правильном направлении. http://stackoverflow.com/questions/1188242/hitting-a-next-button-for-a-uitableviewcell – Jonah