获取用于在 prepareForSegue 中编辑行的索引路径?
get index path for editing row in prepareForSegue?
我正在呈现来自 UITableView
的弹出窗口并使用 prepareForSegue
方法,如 WWDC 2014 中所讨论的“View Controller
iOS8 的进步”
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
pvc.delegate = self;
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
问题是,我需要将一个值从已编辑的行传递到弹出框。有没有办法干净地做到这一点,例如(我知道它不存在,但是)
[self.myTableView indexPathForEditingRow];
我试过了
[self.myTableView indexPathForSelectedRow];
但是这个 returns table 中的第一行。
看看你的 sender
是谁。如果它是一个细胞,那么你就拥有了你所需要的一切。
如果没有,你需要制作一个属性并记住tableView
委托的didSelectCell
方法中的索引路径。
尝试:
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
NSLog(@"Riga selezionata: %ld",(long)[indexPath row]);
如果您从 table 视图调用 performSegueWithIdentifier,您可以发送 indexPath。
[self performSegueWithIdentifier:@"identifier" sender:(NSIndexPath *)indexPath];
然后你可以调用prepareForSegue,你需要一个暴露的方法或者属性来设置popover上的indexPath
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSIndexPath *)indexPath
{
if ([segue.identifier isEqualToString:@"identifier"])
{
UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
//added property
pvc.indexPath = indexPath;
pvc.delegate = self;
}
}
您可以使用此 UITableView
扩展程序:
extension UITableView {
var indexPathForEditingRow: NSIndexPath? {
return indexPathsForEditingRows.first
}
var indexPathsForEditingRows: [NSIndexPath] {
return visibleCells.flatMap { cell -> NSIndexPath? in
guard let indexPath = indexPathForCell(cell) where cell.editingStyle != .None else {
return nil
}
return indexPath
}
}
}
我正在呈现来自 UITableView
的弹出窗口并使用 prepareForSegue
方法,如 WWDC 2014 中所讨论的“View Controller
iOS8 的进步”
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
pvc.delegate = self;
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}
问题是,我需要将一个值从已编辑的行传递到弹出框。有没有办法干净地做到这一点,例如(我知道它不存在,但是)
[self.myTableView indexPathForEditingRow];
我试过了
[self.myTableView indexPathForSelectedRow];
但是这个 returns table 中的第一行。
看看你的 sender
是谁。如果它是一个细胞,那么你就拥有了你所需要的一切。
如果没有,你需要制作一个属性并记住tableView
委托的didSelectCell
方法中的索引路径。
尝试:
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
NSLog(@"Riga selezionata: %ld",(long)[indexPath row]);
如果您从 table 视图调用 performSegueWithIdentifier,您可以发送 indexPath。
[self performSegueWithIdentifier:@"identifier" sender:(NSIndexPath *)indexPath];
然后你可以调用prepareForSegue,你需要一个暴露的方法或者属性来设置popover上的indexPath
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSIndexPath *)indexPath
{
if ([segue.identifier isEqualToString:@"identifier"])
{
UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
//added property
pvc.indexPath = indexPath;
pvc.delegate = self;
}
}
您可以使用此 UITableView
扩展程序:
extension UITableView {
var indexPathForEditingRow: NSIndexPath? {
return indexPathsForEditingRows.first
}
var indexPathsForEditingRows: [NSIndexPath] {
return visibleCells.flatMap { cell -> NSIndexPath? in
guard let indexPath = indexPathForCell(cell) where cell.editingStyle != .None else {
return nil
}
return indexPath
}
}
}