1

Я создал стрелку вверх/вниз по сегментированной кнопке управления с правой стороны панели навигации в моем подробном представлении. В приложении на основе таблиц, как я могу использовать эти стрелки вверх/вниз для перемещения по ячейкам в родительской таблице?Стрелки вверх/вниз в навигационной панели подробного просмотра страницы через объекты в родительской таблице

В примере примера яблока «NavBar» есть пример этого, но элементы управления не работают.

Программа iBird также имеет эту функциональность, и это очень приятно. Скачайте программу «iBird 15» бесплатно.

Любые мысли?

Спасибо!

ответ

1

Я получил это работает с несколькими небольшими проблемами. Вот мой текущий код. Это не очень элегантный, но он работает. 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];} 

Основная проблема заключается в том, что кнопки сегмента никогда не появляются прессуют и действие немедленно отправляется при прикосновении вместо того, когда кнопка отпущена, как с «подправить внутри» действия.

0

Вы должны быть в состоянии сделать это, позвонив selectRowAtIndexPath: анимированные: scrollPosition в действие, связанное с сегментированной управления

+0

Как бы это назвать, используя - (IBAction) segmentAction: (id) отправитель: , когда я не могу использовать indexPath? – Jonah

+0

Я все еще ищу ответ на эту проблему. У вас есть еще какие-то предложения о том, как реализовать selectRowAtIndexPath: анимированный: scrollPosition? Спасибо! – Jonah

+0

Я нашел эту тему с похожим вопросом. Я еще не смог заставить его работать, но это, кажется, шаг в правильном направлении. http://stackoverflow.com/questions/1188242/hitting-a-next-button-for-a-uitableviewcell – Jonah

Смежные вопросы