【发布时间】:2016-07-12 00:56:04
【问题描述】:
我正在制作一个小型银行类应用程序,用于教学目的。
所有交易都存储为核心数据实体,使用 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 风靡一时之前就开始了这个项目。
【问题讨论】:
-
你是如何实现一个单元格的多个动作的?第三方库还是使用原方法?
-
我使用了 UiTableView 委托方法 canEditRowAtIndexPath 和 commitEditingStyle,然后是 editActionsForRowAtIndexPath。这是一个简单的实现,至少是其中的一部分。
标签: ios objective-c uitableview uitableviewrowaction