【问题标题】:How to create simple menu?如何创建简单的菜单?
【发布时间】:2026-01-14 01:10:02
【问题描述】:

我正在尝试在我的应用中创建简单的(类似 Facebook 的)菜单。我发现了几个问题,其中大多数已经接受了答案,但通常答案是使用开发人员完成的一些程序。

这些程序通常在旧版本的 xCode 中(一个不使用情节提要),而那些在情节提要中完成的程序太复杂了,我无法在我的应用中实现。

所以我找到了一个问题,答案是这样的: 1. 创建你的菜单视图控制器(对我来说是 UITableViewController) 2. 在你的初始视图控制器中隐藏这个控制器:

MenuViewController *menView = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];

    [self.view sendSubviewToBack:menView.view];

3 创建一个按钮(可能稍后平移手势),在它的方法中,执行以下操作:

-(IBAction)menuButtonPressed:(id)sender
 {
    CGRect destination = self.navigationController.view.frame;

    if (destination.origin.x > 0) {
        destination.origin.x = 0;
    } else {
        destination.origin.x +=254.5;
    }

    [UIView animateWithDuration:0.25 animations:^{
        self.navigationController.view.frame = destination;
    } completion:^(BOOL finished)
     {
         self.view.userInteractionEnabled = !(destination.origin.x > 0);
     }];


}

我猜这是什么意思,它基本上将您的视图向右移动了固定长度。我想,你的视图,你 sendToBack (你的 UITableView)应该是公开的和可交互的。但是,它对我所做的只是将顶视图向右移动,并在后面留下空白的黑色屏幕。

现在我想,我的问题要么是 menuView 的错误实例化,要么就是我对本指南的理解有误。

如果有人知道如何处理这个问题,我将非常感谢您的回答。也许有一些已经完成的应用程序,就像这样容易理解并且希望在我的代码中更容易实现:)

谢谢!

【问题讨论】:

    标签: iphone ios uiviewcontroller menu subview


    【解决方案1】:

    我会在故事板中使用容器视图来做到这一点。您可以根据自己的喜好调整左侧的大小,然后在其旁边添加一个右侧的,然后在检查器中将其宽度更改为 320——其中大部分将离开屏幕到右侧,它会将其嵌入式控制器的大小调整为是全屏尺寸。您可以删除使用左侧容器视图获得的视图控制器,然后拖出一个表格视图控制器,并使用嵌入segue从左侧视图连接它(当您控制从容器视图拖动时,这将是唯一的选择) .我在主控制器的视图中添加了两个滑动手势识别器(一个左一个右),并将它们连接到主控制器中的 2 个方法。然后在主控制器中,我在 .h 中有这段代码:

    @interface ViewController : UIViewController
    
    @property (weak,nonatomic) IBOutlet UIView *rightView;
    @property (assign,nonatomic) CGRect rightRect;
    
    @end
    

    在 .m 中,只有这个:

    @implementation ViewController
    
    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
        self.rightRect = self.rightView.frame;
    }
    
    
    -(IBAction)revealSidebar:(id)sender {
        [UIView animateWithDuration:.3 animations:^{
            self.rightView.frame = self.view.window.frame;
        }];
    }
    
    -(IBAction)hideSidebar:(id)sender {
        [UIView animateWithDuration:.3 animations:^{
            self.rightView.frame = self.rightRect;
        }];
    }
    @end
    

    【讨论】:

    • 没错,但这会将菜单显示为新的视图控制器,对吗?我想做类似 facebook 的菜单,呈现菜单的最终状态如下所示:a248.e.akamai.net/camo.github.com/… 我的意思是我在 github 上找到了一些项目,我可以使用它们来执行此操作,但它们对我来说太复杂了: D 也就是说,我的项目中无法实现
    • 很难说你在那里展示了什么——看起来图片在右侧被切断了。你想在菜单右侧显示一些东西吗?
    • 没错,就是这样 -> mystcolor.github.com/ux/2012/01/02/…
    • 如果这就是您想要的,那么为什么不使用该链接上提到的实现呢?正如您在帖子中提到的那样,我认为这不是一件“简单”的事情。
    • 因为,修改那些源文件对我来说太多了……我一直在寻找更简单的东西……