Tag: uiviewcontroller

使用容器视图控制器访问导航栏

关于UINavigationController和UINavigatinBar在编写你自己的容器时有两个问题。 1)我创build了一个故事板的初始容器,并将其embedded到UINavigationController中。 我发现我的childViewControllers访问UINavigationBar的唯一方法是在childViewController的viewDidLoad中做这样的事情: UIBarButtonItem *showDetailViewControllerBBI = [[UIBarButtonItem alloc] initWithTitle:@"Show Details" style:UIBarButtonItemStyleBordered target:self action:@selector(switchToCarouselLayout:)]; self.parentViewController.navigationItem.leftBarButtonItem = showDetailViewControllerBBI; 这是得到UINavigationBar的正确方法吗? 2)我以为我可以在UINavigationBar巴掌我的初始ContainerViewController。 我所做的是删除故事板中的UINavigatinController,并在我的containerViewController的顶部放置一个UINavigatinBar。 当我运行该项目时,没有导航栏显示。 那么,如果我不能在我的初始容器视图控制器中,没有embedded到UINavigationController中,那么IB中的UINavigationBar实际上做了什么? 还是只是为了美观,你只能用它与UINavigationControllers? 谢谢。

从故事板中的UIViewController加载一个UIView不起作用

我想加载一个UIView从我的Storyboard内的UIViewController没有segue 。 我创build了UIViewcontroller ,将所有内容都进行了UIViewcontroller ,并将其与特定的类相关联,并设置了一个Storyboard ID 。 我也将元素连接到我的类的h.file ,现在我正在寻找一种方法来初始化这个UIViewController的subview没有segue 。 我一直在search,并find了很多这样加载UIViewController的post: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"]; 尝试像这样添加视图,视图跳转到下一个UIViewController : pointVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:pointVC animated:YES completion:NULL]; 像addChildViewController一样添加它也不起作用: [self addChildViewController:pointVC]; 初始化后,我尝试添加一个特定的UIViewController里面的UIViewController到我的实际视图,但它不工作。 如果我只是使用前两行,没有发生任何事情, UIViewController对象里面没有UIViews ,因为viewDidLoad永远不会被调用。 有任何想法吗? 我也试过了 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; pointVC = (PointsViewController *)[storyboard instantiateViewControllerWithIdentifier:@"PointsViewController"]; [self addChildViewController:pointVC]; [self.view addSubview:pointVC.viewPointsDialog]; […]

iOS Segue – 何时viewControllers实例化

我有一个简单的故事板,有一个主视图控制器和两个细节视图控制器,如图所示。 问题#1 – SequeA将呈现DetailA所在的代码在哪里 问题2 – 在我的AppDelegate代码中,我需要创build一个包含在App中的所有ViewController的数组 – 我如何获得这个数组? – 这是在故事板,但我如何以编程方式访问它。 我可以通过执行以下操作来获取MainViewController:myViewControllerMain =(ViewControllerMain *)self.window.rootViewController; 但我不知道如何访问详细视图控制器(A&B) 问题3 – DetailA是在MainViewController被实例化的时候实例化的,还是在Seque被“触发”的时候被实例化的(这里的什么是正确的 – 被调用?)

将在整个视图控制器多个presentViewController方法调用导致iOS中的内存泄漏?

我知道有很多与这个话题有关的讨论。 但在所有的讨论中,都与2个视图控制器(A&B)进行了讨论。 我的情况是相似的,但不同。 当有多个视图控制器如A,B,C,D时会发生什么。 所以呈现的stream程如同移动一样, 视图控制器A(主页)呈现视图控制器B(列表)。 然后从视图控制器B呈现视图控制器C(细节)。然后从视图控制器C呈现视图控制器D(高级细节)。 然后从视图控制器D呈现视图控制器A,以直接导航到家! 最好的做法是什么?

子类UIWindow

我只是尝试子类UIWindow,以便我可以拦截一些通知。 随着下面列出的代码,我也进入MainWindow.xib并更新UIWindow对象到我的子类。 它加载好,问题是我的标签栏上的标签没有反应(在下面的例子中,我只添加了一个选项卡,但在我的应用程序,我有多个(这不是问题))。 任何人都可以看到我可能做错了什么? 谢谢。 UISubclassedWindow.h #import <UIKit/UIKit.h> @interface UISubclassedWindow : UIWindow { } @end UISubclassedWindow.m #import "UISubclassedWindow.h" @implementation UISubclassedWindow – (id) initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { NSLog(@"init"); } return self; } – (void)makeKeyAndVisible { [super makeKeyAndVisible]; NSLog(@"makeKeyAndVisible"); } – (void)becomeKeyWindow { [super becomeKeyWindow]; NSLog(@"becomeKeyWindow"); } – (void)makeKeyWindow { [super makeKeyWindow]; […]

当从后台打开应用程序时调用了什么UIViewController方法?

有没有任何确定的方式来确定是否从背景模式的应用程序加载视图? 在3.XI中依靠viewDidLoad来做一些初始化等等,但是对于4.X来说,情况并非如此,因为你不能依赖viewDidLoad方法来调用。 我想避免在appdelegate中添加额外的标志来检测这个,我宁愿在UIViewController中使用可靠的方法来做这件事,但似乎无法在UIViewController的生命周期中find任何可以帮助我的东西。 有任何想法吗? 你如何处理这种情况?

为什么使用setViewController从UINavigationController的导航栏中删除所有内容?

这是问题。 我在UINavigationController使用下面的代码来交换rootViewController 。 我需要能够在多个不同的屏幕之间交换rootViewController ,并允许用户从每个屏幕下钻(这显然是为什么我需要Nav控制器): SomeViewController *tmp = [[SomeViewController alloc] initWithNibName:@"SomeViewController" bundle:nil]; NSArray * viewControllers = [self viewControllers]; NSArray * newViewControllers = [NSArray arrayWithObjects:tmp, nil]; [self setViewControllers:newViewControllers]; 现在,在阅读UINavigationController的类引用时,我看到对于“viewControllers”属性,它说:“根视图控制器在数组的索引0处,后视图控制器在索引n-2处,顶部控制器是索引n-1,其中n是数组中的项目数。 当我打印一个我的viewControllers数组在那里,我得到1,当前rootViewController。 顶部控制器(我认为是导航栏)中是否应该没有内容? 只要我用新的视图setViewControllers ,我的导航栏中的一切消失。 我将补充说我有一个左右button以及一个自定义标题button,它们都被初始化,并被添加到init方法的导航栏中,一直工作正常,直到它们消失在我身上。 任何帮助将不胜感激。

iOS:从Storyboard中唯一标识ViewController

我有一个自定义ViewController是可重用的,任意数量的实例将在Storyboard中的NavigationController中链接在一起,所有这些都与代理共享相同的模型。 ViewController需要告诉模型他们是哪个实例。 目前,他们有一个int属性,他们从segue得到,但它似乎不是很习惯,并不适用于在屏幕上的多个实例(对于iPad)。 我认为有一个更清洁的方式来做到这一点,所以有人知道它是什么? 谢谢。 结果:self.view.tag

preferredInterfaceOrientationForPresentation必须返回支持的界面方向(iOS 6)

我的应用程序窗口的根视图控制器是一个子类UINavigationController。 我已经将这个代码添加到类中: – (BOOL)shouldAutorotate { return [self.topViewController shouldAutorotate]; } – (NSUInteger)supportedInterfaceOrientations { return [self.topViewController supportedInterfaceOrientations]; } – (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [self.topViewController preferredInterfaceOrientationForPresentation]; } 在我的根UIViewController我已经添加了这个代码: – (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationPortrait; } – (BOOL)shouldAutorotate { return NO; } – (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationPortrait; } 当设备旋转到这个视图控制器上的横向时,我提出了一个模态视图控制器。 当设备旋转到肖像,我应该解雇模态视图,但是当我这样做时,我得到以下错误: 'preferredInterfaceOrientationForPresentation must return a supported interface orientation!' 为什么我得到这个错误? 我尝试从根UIViewController的shouldAutorotate返回YES,现在我得到错误“支持的方向与应用程序没有共同的方向,并且shouldAutorotate返回YES”。 这对我来说没有任何意义,因为UIInterfaceOrientationPortrait是应用程序支持的方向之一。

创build一个实现特定协议的对象数组

TL; DR 我正在寻找一个数组types( var array = [TheTypeImLookingFor]() ),就像'所有对象UIViewController子类, 并实现协议MyProtocol 。 说明 我正在用容器视图和embedded的子视图(控制器)构build一种向导视图。 没问题,这将工作很长,因为我只有一个basetypes的子视图控制器。 由于屏幕的内容,我现在有一堆types为MyTableViewController的视图控制器,它是UITableViewController的子类和其他具有常规UIViewControllers作为基础的视图控制器。 所有的视图控制器都有一个共同点。 默认的数据属性myData: MyObject 。 我创build了一个包含此属性的协议MyProtocol 。 现在,我必须将所有这些视图控制器合并到一个数组中,以将其用作向导步骤。 只要我只需要访问视图控制器方法(数组项目是UIViewControllertypes),我可以使用var viewControllers = [UIViewController]()或者如果我只想访问myData属性,我改变数组项目types到MyObject 。 但问题是,我必须从UIViewController和协议访问方法。 这就是为什么我正在寻找一个数组types,如'所有对象UIViewController子类和实现协议MyProtocol 。 我试过了: var viewControllers = [UIViewController: MyProtocol]() //是一个字典 var viewControllers = UIViewController其中MyProtocol var viewControllers = UIViewController.conforms(to:MyProtocol) … 但没有任何预期的效果。