#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