来自editActionsForRowAtIndexPath

我正在做一个小银行types的应用程序,为教学目的。

所有事务都以Core Data实体的forms存储,使用Magical Record辅助方法获取和sorting。 事务显示在一个UITableView ,由一个fetchedObjects数组提供。

我想能够像这样使用editActionsForRowAtIndexPath

在这里输入图像说明

第一个动作继续到另一个uiviewController ,第二个到第三个到一个UIPopoverPresentationController 。 第四个button删除交易。

编辑

以下是创buildbutton的代码:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { //Obviously, if this returns no, the edit option won't even populate return YES; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { //Nothing gets called here if you invoke `tableView:editActionsForRowAtIndexPath:` according to Apple docs so just leave this method blank } -(NSArray *)myArray:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewRowAction *delete = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // Delete code here }]; UITableViewRowAction *changeAmt = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Amt" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // popover amount change code }]; changeAmt.backgroundColor = [UIColor colorWithRed:0.022 green:0.541 blue:0.001 alpha:1.00]; UITableViewRowAction *changeAcct = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Acct" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // popover account change code }]; changeAcct.backgroundColor = [UIColor colorWithRed:1.000 green:0.492 blue:0.000 alpha:1.00]; UITableViewRowAction *viewTrans = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"View" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // Push to view }]; viewTrans.backgroundColor = [UIColor colorWithRed:0.002 green:0.342 blue:0.710 alpha:1.00]; return @[delete, changeAmt,changeAcct,viewTrans]; //array with the buttons delete, changeAmt, changeAcct, viewTrans } 

这是我的问题:

我怎么知道哪个button触发哪个segue? 我无法想象如何build立联系。

这是来自我的prepareForSegue的代码块。 我的困惑的一点是由? 在sourceRect的参数中:

 else if ([[segue identifier] isEqualToString:@"AmountPopSegue"]) { UIViewController *controller = segue.destinationViewController; controller.popoverPresentationController.delegate = self; controller.preferredContentSize = CGSizeMake(320, 186); UIPopoverPresentationController *thisPPC = controller.popoverPresentationController; thisNavController = (UINavigationController *)segue.destinationViewController; AmountChangePopVC *acVC = (AmountChangePopVC *)thisNavController.topViewController; acVC.delegate = self; thisPPC.sourceRect = ???; } 

所有的见解都很赞 我在Objective C中编写,因为在Swift变得风靡一时之前,我开始了这个项目。

这种方法可以帮助你。 你会知道哪个button被点击。

– 小心。 此方法仅适用于iOS 8或更高版本.–

 @property (nonatomic, strong) NSIndexPath *firstButtonIndexPath; @property (nonatomic, strong) NSIndexPath *secondButtonIndexPath; @property (nonatomic, strong) NSIndexPath *thirdButtonIndexPath; @property (nonatomic, strong) NSIndexPath *fourthButtonIndexPath; - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showDetail"]) { if (self.firstButtonIndexPath) { NSLog(@"ViewButton :%ld", (long)self.firstButtonIndexPath.row); } else if (self.secondButtonIndexPath) { NSLog(@"Acct :%ld", (long)self.secondButtonIndexPath.row); } else if (self.thirdButtonIndexPath) { NSLog(@"Amt :%ld", (long)self.thirdButtonIndexPath.row); } else if (self.fourthButtonIndexPath) { NSLog(@"Delete :%ld", (long)self.fourthButtonIndexPath.row); } } } - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { self.firstButtonIndexPath = nil; self.secondButtonIndexPath = nil; self.thirdButtonIndexPath = nil; self.fourthButtonIndexPath = nil; UITableViewRowAction *viewAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"View" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { NSLog(@"View the row"); self.firstButtonIndexPath = indexPath; }]; viewAction.backgroundColor = [UIColor blueColor]; UITableViewRowAction *acctAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Acct" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { NSLog(@"Acct the row"); self.secondButtonIndexPath = indexPath; }]; acctAction.backgroundColor = [UIColor orangeColor]; UITableViewRowAction *amtAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Amt" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { NSLog(@"Amt the row"); self.thirdButtonIndexPath = indexPath; }]; amtAction.backgroundColor = [UIColor greenColor]; UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { NSLog(@"Delete the row"); self.fourthButtonIndexPath = indexPath; }]; deleteAction.backgroundColor = [UIColor redColor]; return @[deleteAction, amtAction, acctAction, viewAction]; }