我有一个TableView,它在didSelectRow中加载了一个detailview。我对数据没有任何问题。 我正在使用coreData并填充TableView我正在使用NSFetchedResultsController。
现在,我想在detailView 中创建next和previous函数,以跳转到下一个或上一个Table(row)元素。像邮件应用程序一样 我知道我必须使用带有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'
如何解决这个问题?
答案 0 :(得分:10)
使用您的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 :(得分:1)
您可以使用DataSource数组进行管理。
当你加载详细信息视图时,你传递了数组的索引(indexPath.row)。通过该索引,您可以在详细信息视图中获取数据。并使用该索引中的递增和递减,您可以获得下一个和上一个单元格的数据。
<强>步骤强>
1)设置你的tableView。
2)当重定向到DetailView时,为store current indexPath.row设置一个int变量。所以详细定义一个int View。
3)使用next和previous按钮管理indexpath.row,它位于int变量中。 并表示来自Source数组的适当数据。
答案 2 :(得分:0)
您可以使用:
(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
获取所需的单元格(下一页或上一页)。
然后将返回的单元格“Selected”属性设置为YES。
cell.selected = YES