Как перейти к следующей строке в detailview

#ios #uitableview #core-data #row #nsfetchedresultscontroller

#iOS #uitableview #core-данные #строка #nsfetchedresultscontroller

Вопрос:

у меня есть TableView, который загружает detailview в didSelectRow. У меня нет проблем с данными. Я использую CoreData, а для заполнения TableView я использую NSFetchedResultsController.

Теперь я хочу создать следующую и предыдущую функции в DetailView для перехода к следующему или предыдущему элементу таблицы (строки). Следующая предыдущая, как в почтовом приложении.
Я знаю, что мне нужно использовать кнопку с IBAction.

Но как я могу создать эту функцию?

спасибо,
brush51

Редактировать 1: я сделал это так:

 - (IBAction) previousCard:(id) sender {  
    NSLog(@"previousBtn");

DashboardViewController *parent = (DashboardViewController *)self.parentViewController;

NSIndexPath *actualIndexPath = selectedRow2;
NSIndexPath * newIndexPath = [NSIndexPath  indexPathForRow:actualIndexPath.row-1 inSection:actualIndexPath.section];
NSLog(@"newIndexPath: %@", newIndexPath);
[parent.tableViews selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle]; //HERE I GET SIGABRT

}
  

Но я получаю сообщение об ошибке:

 -[UIViewController tableViews]: unrecognized selector sent to instance 0xd758ae0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController tableViews]: unrecognized selector sent to instance 0xd758ae0'  
  

Как это решить?

Ответ №1:

С помощью UITableView вы можете получить выбранную строку с помощью:

 - (NSIndexPath *)indexPathForSelectedRow
  

И установите выделение, увеличив значение indexPath.row:

 - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition
  

тогда ваше действие может быть:

 -(IBAction)nextCell:(id)sender {
  NSIndexPath * actualIndexPath = myTableView.indexPathForSelectedRow;
  NSIndexPath * newIndexPath = [NSIndexPath  indexPathForRow:actualIndexPath.row 1 inSection:actualIndexPath.section];
  [myTableView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
}
  

Комментарии:

1. Спасибо. И как я могу установить свой TableView здесь, в detailview? или я здесь что-то упускаю?

2. Вы можете добавить ссылку в свой контроллер представления сведений на родительский контроллер, назначить родительский контроллер в didSelectRowAtIndexPath при нажатии на свой контроллер сведений

3. И как это сделать? Не могли бы вы объяснить это, пожалуйста? Прошу прощения за мой низкий опыт работы с ios.

4. хорошо, ссылка выполняется с помощью: (MyParentViewController *)self.parentViewController. теперь я могу использовать таблицу из parentView, но я получаю сообщение об ошибке в indexPathForSelectedRow : -[UIViewController tblViewC]: нераспознанный селектор, отправленный экземпляру 0x4eaa7b0 *** Завершение приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘-[UIViewController tblViewC]: нераспознанный… Что именно мне нужно сделать, чтобы сделать selectrowatindexpath? Как назначить partentController там? Еще раз спасибо.

Ответ №2:

для этого вы можете управлять своим массивом источников данных.

когда вы загружаете свой подробный просмотр в это время, вы передаете свой индекс массива (indexPath.row). по этому индексу вы получаете данные в подробном представлении. и используя increment и decrement в этом индексе, вы получаете данные для следующей и предыдущей ячейки.

Шаги

1) настройте свой TableView.

2) при перенаправлении на DetailView в то время установите одну переменную int для сохранения текущего indexPath.row . итак, определите один int в подробном представлении.

3) с помощью кнопок next и previous управляйте indexpath.row, который находится в переменной int. и представляют соответствующие данные из исходного массива.

Комментарии:

1. хорошо, я передал indexPath в detailview. и как я могу получить данные в моем detailview с помощью indexpath?

Ответ №3:

Вы можете использовать:

(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

Чтобы получить нужную ячейку (следующую или предыдущую).

А затем установите для возвращаемого свойства ячейки «Selected» значение YES.

cell.selected = YES