在 iOS 上像Instagram相机页面一样从选项卡打开视图控制器

4
我希望的是很简单的,就是在iOS版Instagram的中间标签打开应用程序的相机界面,但不像其他标签那样,而是作为独立的视图控制器,并且当你按下取消时,它会返回到你之前所在的标签页。
有任何想法吗?
3个回答

6

编辑:为了让这段代码正常工作,您需要子类化UITabBarController并实现UITabBarDelegate。因此,您需要添加类似以下的内容:

@interface MyTabsViewController : UITabBarController <UITabBarDelegate>

在Interface Builder中,您需要将选项卡项目的标记设置为您需要的内容:

enter image description here

现在您可以像这样操作:

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    if(item.tag == 1)
    {
        [self presentViewController:myVC animated:YES completion:nil];
    }
    else if(item.tag == 2)
    {
       //your code
    }
}

这将使您能够获取每个选项卡栏项目的点击事件,并添加一些自定义代码,您只需要在接口生成器中为选项卡按钮添加适当的标签即可。例如,您可以添加代码以显示自己的视图控制器,如上所示。
希望这有所帮助!
这里还有另一个链接:如何通过单击TabbarItem按钮来获取Tabbar Item Button的单击事件?

谢谢,目前我还没有实现自己的自定义UITabBarController,但我在storyboard中创建了选项卡,所以我的问题是,我需要在自己的自定义UITabBarController中实现您发布的代码,还是可以将该代码放在我的一个视图控制器或应用程序委托中?谢谢。 - aviv_elk
1
编辑了我的答案以提供更多细节。您需要子类化UITabBarController并在IB中设置每个选项卡项目的标记。您还需要实现UITabBarDelegate协议,以便可以访问委托方法tabBar:didSelectItem: - erparker

1
听起来你想做的事情涉及到TabBarViewController。你可以从Xcode欢迎屏幕选择此选项来创建一个新项目:

enter image description here

enter image description here

这个“选项卡应用程序”起始项目将为您提供一个完全功能且可运行的应用程序,供您构建。
从你描述Instagram中的选项卡栏的方式来看,似乎你需要对选项卡栏进行一些自定义。首先,摄像机选项卡中央有一个蓝色背景。尝试使用this SO article 来帮助解决。
当你在相机页面点击取消按钮并且想要选择上次选择的选项卡时,可以使用此方法作为编程的起点来动态选择某个选项卡:
[self.tabBarController setSelectedIndex:2];

希望这能让你朝着正确的方向开始。

谢谢您的回答,但我已经有一个正在运行的选项卡栏,但我认为我应该使用所选选项卡的事件,并在该事件上执行类似以下的操作: [self.navigationController pushViewController:cameraViewController animated:YES]; - aviv_elk
你是否遇到了显示相机页面的问题,这是主要的问题吗? - Ethan Parker

0

SWIFT 4 代码

在按照 @erparker 的指示子类化 Tabbarcontroller 后,使用以下代码

 override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        if(item.tag==300){


            if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "addNewTaskView") as? AddNewTaskViewController {

               self.present(viewController, animated: true, completion: nil)
            }

        }
    }

这里,“Main”是包含目标视图控制器的故事板名称,“addNewTaskView”是在故事板中为视图控制器指定的视图控制器故事板ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接