gpt4 book ai didi

ios - 具有 Storyboard Segues 的上下文菜单预览提供程序

转载 作者:行者123 更新时间:2023-12-01 17:57:00 46 4
gpt4 key购买 nike

在我的 Storyboard中,我有一个带有静态单元的 TableView Controller ,每个单元执行一个segue来呈现 View Controller 。

到目前为止,可以在 Storyboard 中启用 Peek 和 Pop 支持,并且它将为此实现所有旧版 API。

上下文菜单目前似乎没有这样的选项。

我的问题是,是否有可能以某种方式按需从 segue 获取 Controller ,以便我可以通过 UIContextMenuContentPreviewProvider 返回它?欢迎任何其他建议(除了更改 Storyboard 中的静态单元格之外)!

最佳答案

使用私有(private) API 解决了这个问题,但是不应该使用这个! 仅用于教育目的!

我给每个单元格和segue 相同的标识符。然后使用私有(private) API,我实例化 Segue 的目标 Controller 并将其作为预览返回。

让我们声明一些私有(private) API:

@interface UIViewController ()

- (id)_segueTemplateWithIdentifier:(id)arg1;

@end

@interface NSObject ()

- (id)instantiateOrFindDestinationViewControllerWithSender:(id)arg1;

@end

然后在实现中将其结合在一起:

@implementation DemoGalleryController

- (nullable UIContextMenuConfiguration *)tableView:(UITableView *)tableView contextMenuConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath point:(CGPoint)point API_AVAILABLE(ios(13.0))
{
return [UIContextMenuConfiguration configurationWithIdentifier:@"Preview" previewProvider:^ UIViewController* {
NSString* cellIdentifier = [tableView cellForRowAtIndexPath:indexPath].reuseIdentifier;
id segueTemplate = [self _segueTemplateWithIdentifier:cellIdentifier];
return [segueTemplate instantiateOrFindDestinationViewControllerWithSender:self];;
} actionProvider:nil];
}

- (void)tableView:(UITableView *)tableView willPerformPreviewActionForMenuWithConfiguration:(UIContextMenuConfiguration *)configuration animator:(id<UIContextMenuInteractionCommitAnimating>)animator API_AVAILABLE(ios(13.0))
{
UIViewController* vc = animator.previewViewController;

[animator addCompletion:^{
[self presentViewController:vc animated:YES completion:nil];
}];
}

@end

关于ios - 具有 Storyboard Segues 的上下文菜单预览提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57589187/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com