首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIContextMenuInteraction for UIControl

UIContextMenuInteraction for UIControl
EN

Stack Overflow用户
提问于 2021-12-18 06:36:52
回答 1查看 332关注 0票数 0

我知道UIButton有一个menu属性,因此可以将上下文菜单添加到按钮中。但是对于其他UIControl子类,如自定义UIControls,则不存在此属性。

我知道向UIControl添加上下文菜单的一种方法是调用addInteraction,然后为上下文菜单采用委托。但是,如果页面上有多个控件,那么如何添加所有不同控件的菜单,因为它们都共享相同的委托?

或者,如何将menu属性添加到UIControl子类中?我知道UIControl有一个名为contextMenuInteraction的属性,它显然是自动填充的,但我不知道如何使用该属性。我知道控件必须实现委托方法(UIContextMenuConfiguration *)contextMenuInteraction:(UIContextMenuInteraction *)interaction configurationForMenuAtLocation:(CGPoint)location,但是在该方法中,我只是构造UIContextMenuInteraction对象吗?当设置menu属性时,如何让它调用委托方法?

本质上,我希望能够在我的UIButton子类中模仿menu类的menu属性。但如果不是这样的话,那么我至少想弄清楚如何支持多个上下文菜单--所有这些菜单都共享同一个委托。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-18 21:53:07

您可以按照添加新手势识别器的方式,将新的UIContextMenuInteraction对象创建并添加到视图(或控件等)中。

然后,在菜单操作处理程序中,您可以获得通过.sender显示菜单的长时间按下的视图。

代码语言:javascript
复制
    UIAction *someAction = [UIAction actionWithTitle:@"Some Menu Option"
                                               image:nil
                                          identifier:nil
                                             handler:^(__kindof UIAction* _Nonnull action) {

        // get the view that presented the context menu
        UIView *v = ((UIContextMenuInteraction *)(action.sender)).view;

        // do something
    }];

因此,如果我有一个名为MySwitch的自定义MySwitch,并且我想将其中的7个添加到堆栈视图中,为每个视图提供一个上下文菜单,我可以这样做:

代码语言:javascript
复制
for (int i = 1; i < 8; i++) {
    MySwitch *v = [MySwitch new];
    [v setTitle:[NSString stringWithFormat:@"Switch: %d", i]];
    [v.heightAnchor constraintEqualToConstant:60.0].active = YES;
    UIContextMenuInteraction *interaction = [[UIContextMenuInteraction alloc] initWithDelegate:self];
    [v addInteraction:interaction];
    [stack addArrangedSubview:v];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70401486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档