Tag: uiviewcontroller

拒绝提出的视图控制器

我有一个理论上的问题。 现在,我正在阅读苹果的ViewController指南。 他们写: 当需要closures一个呈现的视图控制器时,首选的方法是让呈现视图控制器closures它。 换句话说,只要有可能,呈现视图控制器的视图控制器也应该负责解除视图控制器。 虽然有几种技术用于通知呈现视图控制器它的呈现的视图控制器应该被解散,但是优选的技术是委派。 但我不能解释,为什么我必须在提出的VC中创build一个协议,并添加委托variables,创build委托方法提出VC退出提出的VC,而不是一个简单的调用呈现的视图控制器方法 [self dismissViewControllerAnimated:NO completion:nil] ? 为什么第一个select更好? 为什么苹果推荐它?

addChildViewController实际上做了什么?

我只是第一次进入iOS开发,我不得不做的第一件事就是实现一个自定义的容器视图控制器 – 让我们调用它的SideBarViewController – 交换了几个可能的子视图控制器它显示,几乎完全像一个标准的标签栏控制器 。 (这几乎是一个标签栏控制器,但有一个可隐藏的侧面菜单,而不是一个标签栏。) 按照Apple文档中的说明,每当向容器中添加一个子ViewController时,我都会调用addChildViewController 。 我用于交换SideBarViewController显示的当前子视图控制器的代码如下所示: – (void)showViewController:(UIViewController *)newViewController { UIViewController* oldViewController = [self.childViewControllers objectAtIndex:0]; [oldViewController removeFromParentViewController]; [oldViewController.view removeFromSuperview]; newViewController.view.frame = CGRectMake( 0, 0, self.view.frame.size.width, self.view.frame.size.height ); [self addChildViewController: newViewController]; [self.view addSubview: newViewController.view]; } 然后我开始试图弄清楚addChildViewController在这里做了什么,我意识到我不知道。 除了在.childViewControllers数组中粘贴新的ViewController .childViewControllers ,它对任何东西都没有影响。 从子控制器的视图到我在故事板上设置的子控制器的操作和插口仍然可以正常工作,即使我从不调用addChildViewController ,也无法想象会有什么影响。 事实上,如果我重写我的代码不调用addChildViewController ,而是看起来像这样… – (void)showViewController:(UIViewController *)newViewController { // Get the current child […]

如何创build自定义的iOS视图类并实例化它的多个副本(在IB中)?

我目前正在做一个应用程序,将有多个计时器,基本上都是一样的。 我想创build一个自定义的类,它使用定时器的所有代码以及布局/animation,所以我可以有5个相同的定时器独立运行。 我使用IB(xcode 4.2)创build了布局,并且所有定时器的代码当前只是在viewcontroller类中。 我很难包装我的大脑如何封装一切到自定义类,然后将其添加到视图控制器,任何帮助将不胜感激。

鉴于一个观点,我怎么得到它的viewController?

我有一个指向UIView的指针。 我如何访问它的UIViewController ? [self superview]是另一个UIView ,但不是UIViewController ,对不对?

View Controller Containment如何在iOS 5中工作?

在WWDC 2011 Session 102中,Apple推出了View Controller Containment,它能够创build自定义视图控制器容器,类似于UITabBarController , UINavigationController等。 我多次看过这些例子。 这种模式有很多方法,但要弄清楚它们有点难。 我要在这里张贴我想说的事情,看看社区是否会证实或不信任我的怀疑。 场景1:从没有父节点移动到新的父视图控制器 [vc willMoveToParentViewController:self]; [self addChildViewController:vc]; [self.view addSubview:vc.view]; // or something like this. [vc didMoveToParentViewController:self]; 前两行必须按照给定的顺序发生,还是可以颠倒? 场景2:从父视图控制器移到没有父视图控制器 [vc willMoveToParentViewController:nil]; [vc.view removeFromSuperview]; [vc removeFromParentViewController]; 还有必要调用[vc didMoveToParentViewController:nil] ? 第102场会议的例子在这种情况下并没有这样做 ,但我不知道这是否是遗漏。 场景3:从一个父视图控制器移动到另一个 这可能会以下面的方式发生,因为每个父视图控制器中的逻辑将被封装。 // In the old parent [vc willMoveToParentViewController:nil]; [vc.view removeFromSuperview]; [vc removeFromParentViewController]; // In the new […]

首先添加一个UIView,甚至导航栏

我想在任何其他视图之上显示导航栏,这是一种类似于这样的“popup式”视图: 用0.5 alpha的全屏幕黑色背景看下面的其他UIViewController 。 一个UIView窗口中间有一些信息,(一个日历,如果你想知道一切)。 为此,我创build了一个包含两个UIViews (背景和窗口)的UIViewController,并试图显示它。 我试过一个简单的[mySuperVC addSubview:myPopUpVC.view] ,但我仍然有上面的导航栏。 我试图把它作为模式呈现,但是下面的UIViewController消失了,我失去了透明效果。 任何想法做到这一点,我相信这是相当简单的… 谢谢!

在iOS8中使用Swift更改特定ViewController的状态栏颜色

override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent; } 在任何ViewController中使用上面的代码来设置statusBar颜色为白色的特定的viewcontroller 不适用于我的iOS8 。 有什么build议么? 使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中进行所需更改后,颜色会发生变化。 // Change the colour of status bar from black to white UIApplication.sharedApplication().statusBarStyle = .LightContent 我如何才能更改状态栏颜色的一些必需和特定的ViewControllers ?

通过UIViewController显示clearColor UIViewController

我有一个UIViewController视图作为一个子视图/模式在另一个UIViewController视图的顶部,如子视图/模式应该是透明的,任何组件添加到子视图应该是可见的。 问题是,我已经是子视图显示黑色背景,而不是有clearColor。 我试图使UIView作为clearColor不是黑色的背景。 有人知道它有什么问题吗? 任何build议表示赞赏。 FirstViewController.m UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"]; [vc setModalPresentationStyle:UIModalPresentationFullScreen]; [self presentModalViewController:vc animated:NO]; SecondViewController.m – (void)viewDidLoad { [super viewDidLoad]; self.view.opaque = YES; self.view.backgroundColor = [UIColor clearColor]; } 解决 :我解决了这个问题。 iPhone和iPad的效果都非常好。 没有黑色背景的模式视图控制器只是clearColor /透明。 唯一需要改变的是我将UIModalPresentationFullScreenreplace为UIModalPresentationCurrentContext 。 那简单多了! FirstViewController.m UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *vc = [storyboard […]

在不使用导航控制器堆栈,子视图或模态控制器的情况下animation化视图控制器的更改?

NavigationControllers具有ViewController堆栈来pipe理和限制animation转换。 将视图控制器作为子视图添加到现有的视图控制器需要将事件传递给子视图控制器,这是一个痛苦的pipe理,加载了一点烦恼,一般感觉像一个坏的黑客时,实施(苹果还build议这样做)。 呈现一个模式视图控制器再次放置一个视图控制器在另一个之上,虽然它没有上述事件传递的问题,它不真正“交换”视图控制器,它堆叠它。 故事板仅限于iOS 5,几乎是理想的,但不能在所有项目中使用。 有人可以提出一个固体代码示例的方式来更改视图控制器没有上述限制,并允许他们之间的animation过渡? 一个closures的例子,但没有animation: 如何使用多个iOS自定义视图控制器没有导航控制器 编辑:导航控制器使用是好的,但需要有animation过渡样式(而不是简单的幻灯片效果)所显示的视图控制器需要完全交换(不堆积)。 如果第二个视图控制器必须从堆栈中移除另一个视图控制器,那么它的封装不够。 编辑2:iOS 4应该是这个问题的基本操作系统,我应该澄清,当提到故事板(上面)。

iPhone – closures多个ViewControllers

我有一个很长的视图控制器层次结构; 在第一个视图控制器我使用这个代码: SecondViewController *svc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; [self presentModalViewController:svc animated:YES]; [svc release]; 在第二个视图控制器我使用这个代码: ThirdViewController *tvc = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil]; [self presentModalViewController:tvc animated:YES]; [tvc release]; 等等。 所以有一个时刻,我有很多视图控制器,我需要回到第一个视图控制器。 如果我一次回来一步,我在每个视图控制器中使用这个代码: [self dismissModalViewControllerAnimated:YES]; 如果我想从第六个视图控制器直接返回到第一个视图控制器,我必须做什么来一次解散所有的控制器? 谢谢