为了教学目的,我正在制作一个小型银行类应用程序。
所有交易都存储为核心数据实体,使用Magical Record辅助方法获取和排序。交易显示在UITableView
中,由fetchedObjects
数组提供。
我希望能够如此使用editActionsForRowAtIndexPath
:
第一个动作分为另一个uiviewController
,第二个动作分为UIPopoverPresentationController
。第四个按钮删除事务。
这是创建按钮的代码:
- (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
}
这是我的问题:
如何判断哪个按钮触发哪个segue?我无法弄清楚如何建立联系。
这是我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风靡一时之前开始了这个项目。
答案 0 :(得分:0)
这种方法可以帮到你。你会知道点击了哪个按钮。
- 小心点。此方法仅适用于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];
}