Questions tagged «uiviewcontroller»

UIViewController类管理iOS应用程序中的视图,并介导应用程序的视图,其基础模型对象和整个工作流之间的交互。

11
检测表已在iOS 13上关闭
在iOS 13之前,提供了用于覆盖整个屏幕的视图控制器。并且,在关闭后,将viewDidAppear执行父视图控制器功能。 现在,iOS 13默认将表单显示为视图控制器,这意味着卡将部分覆盖基础视图控制器,这意味着viewDidAppear不会被调用,因为父视图控制器从未真正消失过。 有没有一种方法可以检测到所显示的视图控制器工作表已被解雇?我可以在父视图控制器中重写某些其他功能,而不是使用某种委托?

7
如何获得根视图控制器?
我需要一个根视图控制器实例。 我尝试了这些方法: UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController]; 返回: null: 另外,当我尝试获取控制器数组时: NSArray *viewControllers = self.navigationController.viewControllers; 它仅返回一个控制器,但不是我的根视图控制器。 如果我尝试从导航控制器中获取: UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0]; 返回: null: 有什么想法吗?我还能尝试获得根视图控制器的一个实例吗? 谢谢。

2
iOS 5中的View Controller Containment如何工作?
在2011年WWDC会话102,苹果推出视图控制器遏制,这是创建定制的视图控制器容器的能力,类似于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]吗?在这种情况下,Session 102中的示例并未执行此操作,但是我不知道这是否是遗漏。 方案3:从一个父视图控制器移动到另一个 这很可能会以以下方式发生,因为每个父视图控制器中的逻辑都将被封装。 // In the old parent [vc willMoveToParentViewController:nil]; [vc.view removeFromSuperview]; [vc removeFromParentViewController]; // In the new parent [vc willMoveToParentViewController:self]; [self addChildViewController:vc]; [self.view …

8
如何更改独立于标签栏项目标题的uiviewcontroller标题
我在视图中设置了这样的视图控制器标题: self.title = @"my title"; 在此之前,我在故事板中设置了其嵌入的视图控制器和导航控制器的标题。我将其设置为:“ Title”; 当我单击包含视图控制器的选项卡时,选项卡栏项目的标题uiviewcontroller更改为:我的标题 我想更改视图控制器,但选项卡栏项保留标题:Title 我该怎么做?

3
addChildViewController实际做什么?
我只是第一次涉足iOS开发,而我要做的第一件事就是实现一个自定义容器视图控制器 -让我们称之为它SideBarViewController-交换掉它可能使用的几个子视图控制器中的一个显示,几乎完全像标准的Tab Bar Controller一样。(它几乎是一个标签栏控制器,但具有可隐藏的侧菜单而不是标签栏。) 按照Apple文档中的说明,addChildViewController每当将子ViewController添加到容器中时,我都会调用。我的代码换出了当前的子视图控制器,如下所示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这里所做的事情,然后我意识到自己不知道。除了坚持新ViewController的在.childViewControllers阵,它似乎对任何事情没有影响。即使我从未调用过addChildViewController,从子控制器的视图到我在情节提要上设置的子控制器的操作和输出仍然可以正常工作,而且我无法想象它还会影响什么。 确实,如果我将代码重写为not call addChildViewController,而是看起来像这样…… - (void)showViewController:(UIViewController *)newViewController { // Get the current child from a member variable …

12
presentViewController和显示导航栏
我有一个视图控制器层次结构,最顶层的控制器显示为模式,并想知道在使用时如何显示导航栏 'UIViewController:presentViewController:viewControllerToPresent:animated:completion' “ presentViewController:animated:completion:”的文档请注意: '在iPhone和iPod touch上,显示的视图始终为全屏。在iPad上,演示文稿取决于modalPresentationStyle属性中的值。 对于'modalPresentationStyle',文档说: 呈现样式决定了模态呈现的视图控制器如何在屏幕上显示。在iPhone和iPod touch上,模态视图控制器始终以全屏显示,但在iPad上有几种不同的显示选项。 一旦视图控件显示自身,是否有办法确保导航栏在状态栏下方可见?我应该将文档解释为,您没有iPhone / iPod的任何选项,而只有iPad? 以前,我使用的工具'UIViewController:presentModalViewController:animated'运行良好,但是自iOS 5.0以来,该API已被弃用,因此我将切换到新的API。 从视觉上看,我想要做的是从屏幕底部插入新的控制器幻灯片,就像以前使用的旧API一样。 [使用代码更新]: // My root level view: UIViewController *vc = [[RootViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]]; navController = [[UINavigationController alloc] initWithRootViewController:vc]; .... // Within the RootViewController, Second view controller is created and added // to the hierarchy. …

5
更改transitionWithView内的rootViewController时泄漏视图
在调查内存泄漏时,我发现了与setRootViewController:在过渡动画块内调用技术有关的问题: [UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ self.window.rootViewController = newController; } completion:nil]; 如果旧的视图控制器(正在被替换的视图控制器)当前正在显示另一个视图控制器,则上面的代码不会从视图层次结构中删除显示的视图。 也就是说,这一系列操作... X成为Root View Controller X代表Y,因此Y的视图在屏幕上 使用transitionWithView:使Z中的新根视图控制器 ...看起来对用户来说还可以,但是Debug View Hierarchy工具将显示Y的视图仍在Z的视图之后,在A的内部UITransitionView。也就是说,经过上述三个步骤,视图层次结构为: UIWindow UITransitionView UIView(Y的视图) UIView(Z的视图) 我怀疑这是一个问题,因为在过渡时,X的视图实际上并不是视图层次结构的一部分。 如果我dismissViewControllerAnimated:NO在紧接之前发送给X transitionWithView:,则结果视图层次为: UIWindow UIView(X的视图) UIView(Z的视图) 如果我向dismissViewControllerAnimated:X 发送(是或否),然后在completion:块中执行转换,则视图层次结构正确。不幸的是,这会干扰动画。如果为解雇设置动画,则会浪费时间。如果不设置动画,它看起来就坏了。 我正在尝试其他方法(例如,使新的容器视图控制器类充当我的根视图控制器),但没有找到任何可行的方法。我将随时更新此问题。 最终目标是直接从呈现的视图过渡到新的根视图控制器,而不会留下杂散的视图层次结构。



7
容器视图控制器示例[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 谁能指出我将自定义视图控制器创建为容器视图控制器的任何好例子?我可以找到的唯一文档是《UIViewController类参考》中的几段。我觉得我需要的比这更多的信息,并且示例实现会很好。谷歌什么也没发现。 我对这种方法特别感兴趣: transitionFromViewController:toViewController:duration:options:animations:completion:

8
presentViewController:animated:YES视图将不会出现,直到用户再次轻按
我的出现了一些奇怪的行为presentViewController:animated:completion。我要做的本质上是一个猜谜游戏。 我有一个UIViewController包含UITableView(frequencyTableView)的(frequencyViewController)。当用户点击questionTableView中包含正确答案的行时,应实例化一个视图(correctViewController),并且其视图应从屏幕底部作为模式视图向上滑动。这告诉用户他们的答案正确,并重置其后面的frequencyViewController以准备下一个问题。按下按钮以显示下一个问题时,会关闭correctViewController。 每次都可以正常工作,只要presentViewController:animated:completion有has,即可立即显示正确的ViewController的视图animated:NO。 如果设置animated:YES,则会初始化correctViewController并调用viewDidLoad。但是viewWillAppear,不会调用viewDidAppear和的from的完成块presentViewController:animated:completion。该应用程序只是坐在那里,仍然显示frequencyViewController,直到我再次点击。现在,将调用viewWillAppear,viewDidAppear和完成块。 我进行了更多调查,不仅仅是让它继续下去的另一个水龙头。看来,如果我倾斜或摇动我的iPhone,这也可能导致它触发viewWillLoad等。这就像它在等待用户输入的其他任何内容之前,都会继续前进。这是在真实的iPhone上和模拟器中发生的,我通过将摇指令发送到模拟器来证明这一点。 我真的对此无所适从……我非常感谢任何人都可以提供的任何帮助。 谢谢 这是我的代码。很简单... 这是questionViewController中的代码,充当questionTableView的委托 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row != [self.frequencyModel currentFrequencyIndex]) { // If guess was wrong, then mark the selection as incorrect NSLog(@"Incorrect Guess: %@", [self.frequencyModel frequencyLabelAtIndex:(int)indexPath.row]); UITableViewCell *cell = [self.frequencyTableView cellForRowAtIndexPath:indexPath]; [cell setBackgroundColor:[UIColor colorWithRed:240/255.0f green:110/255.0f blue:103/255.0f alpha:1.0f]]; } else …

5
如何在Swift中为UIViewController子类创建自定义初始化程序?
不好意思,如果以前已经问过这个问题,我已经搜索了很多内容,并且很多答案都来自早期Swift版本,当时情况有所不同。我似乎找不到确切的答案。 我想创建一个子类,UIViewController并有一个自定义的初始化程序,使我可以轻松地在代码中进行设置。我在Swift中无法做到这一点。 我想要一个init()可以用来传递特定参数的函数,NSURL然后将其与视图控制器一起使用。在我看来,它看起来像init(withImageURL: NSURL)。如果我添加了该功能,则要求我添加该init(coder: NSCoder)功能。 我相信这是因为它在超类中用required关键字标记了吗?所以我必须在子类中这样做吗?我添加它: required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } 怎么办?我的特殊初始化程序被认为是convenience一个吗?指定一个?我叫超级初始化器吗?来自同一类的初始值设定项? 如何将特殊的初始化程序添加到UIViewController子类上?


21
带有嵌入式导航控制器的Popover不考虑后导航的大小
我有一个托管UINavigationController的UIPopoverController,其中包含一个小的层次的视图控制器。 我遵循了文档,并为每个视图控制器设置了视图的popover-context大小,如下所示: [self setContentSizeForViewInPopover:CGSizeMake(320, 500)]; (每个控制器的大小不同) 当我在层次结构中向前导航时,这可以按预期工作-弹出窗口会自动为尺寸更改设置动画效果,以与推送的控制器相对应。 但是,当我通过导航栏的“后退”按钮在视图堆栈中浏览“后退”时,弹出窗口不会改变大小,它的大小与到达的最深视图一样大。这对我来说似乎很糟;我希望弹出窗口在通过视图堆栈弹出时会尊重设置的大小。 我想念什么吗? 谢谢。

12
使用故事板中的界面设置在Swift中为UIViewController进行自定义初始化
我在为UIViewController的子类编写自定义init时遇到问题,基本上我想将依赖项通过viewController的init方法传递,而不是像 viewControllerB.property = value 所以我为viewController做了一个自定义的初始化,并调用了超级指定的初始化 init(meme: Meme?) { self.meme = meme super.init(nibName: nil, bundle: nil) } 视图控制器界面位于情节提要中,我也将自定义类的界面设置为我的视图控制器。即使您未在此方法中执行任何操作,Swift也需要调用此init方法。否则编译器会抱怨... required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } 问题是当我尝试使用MyViewController(meme: meme)它的自定义init根本没有在viewController中的init属性时... 我正在尝试调试,我在viewController中init(coder aDecoder: NSCoder)找到它,然后先调用它,然后再调用我的自定义init。但是,这两个init方法返回不同的self内存地址。 我怀疑有毛病初始化为我的viewController,它总是会返回self与init?(coder aDecoder: NSCoder),其中,有没有实现。 有谁知道如何正确地为您的viewController进行自定义初始化?注意:我的viewController的界面是在情节提要中设置的 这是我的viewController代码: class MemeDetailVC : UIViewController { var meme : Meme! @IBOutlet weak var editedImage: UIImageView! // …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.