Tag: navigationcontroller

以编程方式创建自定义View Controller导航界面(swift 3.1)

在构建应用程序时,必须考虑将内容显示给用户的方式。 将功能和逻辑分离到不同的视图控制器中,可以使用户和您的代码库保持整洁。 尽管Apple提供了使用UINavigationController或UITabBarController导航到这些视图控制器的方法,但有时它们不太适合您的应用程序需求。 在本文中,我将构建一个简单的应用程序,演示如何创建导航界面。 它将涉及创建一个主视图控制器,该主视图控制器将负责根据用户操作来呈现和关闭其他视图控制器视图。 设置项目 让我们从创建一个单一视图应用程序开始。 创建项目后,我将删除main.storyboard文件,并从部署信息下的项目主界面中删除main。 接下来,将默认的ViewController重命名为MasterViewController。 最后,在AppDelegate中并设置我们的窗口以使用MasterViewConroller作为根视图控制器。 我将masterVC背景色设置为红色,以便我们知道一切正常。 此时运行该应用程序将使您出现一个红色屏幕。 设置MasterViewController 这里的概念是让MasterViewController显示其他视图控制器的视图。 为了做到这一点, MasterViewController需要做两件事-一种过渡到要显示的视图控制器的方法,以及一个指定为包含该视图控制器主视图的视图。 对于我们的示例,我们将UISegmentedControl放置在页面顶部,并在MasterViewController的视图中添加一个容器视图以显示其他视图控制器视图。 这是用于设置navSegmentedControl和contentView的代码。 接下来,我们可以为要显示的视图控制器创建一些新的swift文件。 这些将是MasterViewController的子视图控制器,我们将在viewDidLoad中更改其颜色,以便我们知道何时切换到它们。 现在,我们有了主视图控制器和要显示的视图控制器。 接下来,我们将向MasterViewController添加逻辑,这将使我们能够根据我们选择的段过渡到子视图控制器。 添加子视图控制器 我们需要做的第一件事是告诉我们的MasterViewController哪个视图控制器将是它的子级。 您决定如何存储子视图控制器取决于您-在本示例中,我将创建两个惰性变量,如果将它们导航到,它们会将自身添加为子变量。 首先让我们创建一个将子视图控制器添加到MasterViewController的函数。 在此函数中,我们使用apples API将视图控制器作为子级添加到自身( MasterViewController )中,并使用containerView显示视图控制器视图。 使用addChildToViewController和didMoveToParentViewController很重要,因为它可以正确地在要添加的子视图控制器的生命周期中移动。 如果我们只是简单地将childVC.view作为子视图添加到与UIViewController生命周期相关的self.view函数,则将不会调用该函数(例如viewDidAppear )。 现在,我们可以使用在惰性变量中创建的此函数。 通过使这些变量变得惰性,可以避免在用户不过渡到子视图控制器时创建子视图控制器的情况。 向分段控件添加功能 现在,我们可以将一个目标添加到navSegmentControl ,该目标告诉我们选择是否更改-如果更改,则在containerView中显示正确的视图控制器。 让我们先创建一个函数,该函数包含在分段控制器的选择更改时发生的逻辑。 一旦选择了要移动到的视图控制器,就会在此处进行转换。 在此示例中,我只是基于所选索引隐藏或显示视图控制器。 如果要创建自定义动画来呈现视图,则应在此处调用它。 记住,我们不需要在这里调用addAsChildVC函数,因为在创建惰性变量时会调用该函数。 现在,我们可以将此功能添加为setupViews函数中的目标。 最后,我们可以取消隐藏确实加载了视图的blueVC,以便当appRun运行时,我们看到的是蓝色选择,而不是白色的屏幕。 差不多了! 现在,当我们运行该应用程序时,我们可以通过在分段控件中进行选择来在视图控制器之间进行转换。 如果要从MasterViewController中删除一个视图控制器作为子视图控制器,则可以实现以下功能。 您可以在此处查看完整的项目。 希望你喜欢这个帖子!

iOS9导航栏后退button不起作用

一切工作在iOS 9之前完美。 但是,当应用程序在iOS 9上运行时,当点击返回button时没有任何反应,所以我无法返回,因为它保持灰色。 而且,在第一轮之后,我无法继续下一个观点。 例如, 主页 – >点击一个button,继续查看1 – > Segued查看1 – >点击一个button继续查看2 – >没有任何反应 我使用下面的代码执行segue, UIViewController *push = [self.storyboard instantiateViewControllerWithIdentifier:@"storyboard_id"]; [self.navigationController pushViewController:push animated:YES]; 这个问题只发生在iPhone上 但在模拟器上运行时,该应用程序完美无瑕 。 感谢您的帮助。

NSInvalidArgumentException“无法识别的select器发送到实例”(使用MPMoviePlayerController)

那么,我有一个具有DetailViewController的RootViewController中的TableView,用于显示单个logging的信息。 在详细信息页面我必须播放一个多媒体文件,并使用框架MediaPlayer,根据本指南: http : //www.techotopia.com/index.php/Video_Playback_from_within_an_iOS_4_iPhone_Application 似乎一切都好,但是当我点击播放button时,我有这个错误: -[DetailsViewController playmovie]: unrecognized selector sent to instance 0x9117f60 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[DetailsViewController playmovie]: unrecognized selector sent to instance 0x9117f60' 这些是我的文件: 在AppDelegate中,我使用这个导航控制器: […] // Create a table view controller RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain]; rootViewController.managedObjectContext = context; rootViewController.entityName = @"Porti"; UINavigationController *aNavigationController = […]

UINavigation Controller根视图更改

我最近遇到了故事板的一个小问题。 我有一个UINavigationController比与MainView RootViewController (这一个有所有的button导致我的应用程序的其余部分)的关系。 但是,我试图改变RootViewController以便我可以启用持久login,而不是一个UIWebviewlogin。 当我将新的Logon Form ViewController作为Root时,我的MainView上的button停止工作。 我也已经将UINavigationController设置为初始视图控制器。 有什么想法在这里做什么? 我知道我可以简单地在故事板上login屏幕并以编程方式调用它,将其设置为在布尔条件(loginDidSucceed)上前进。 不过,我很困惑为什么这种行为发生在StoryBoard上。 解决scheme推荐: 现在的Splash / Login ViewController与StoryBoard 感谢您的帮助和努力!

如何将parameter passing给导航控制器内的弹窗视图控制器

我在detailviewcontroller的导航栏中有一个带有分割视图和右侧栏button的iPad应用程序。 此button调用由导航控制器和两个表视图组成的popup窗口。 如下图所示 由于故事板上的图片很小,我添加了一些解释。 White控制器是detailViewController(位于splitviewcontroller的右侧),位于导航控制器内部。 白色视图右侧的三个视图是从左到右:navigationController,firstTableView,secondTableView。 我的问题是我需要传递参数到第一个表视图来正确configuration它。 我使用这样做时,视图控制器共享相同的导航控制器。 – (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if([[segue identifier] isEqualToString:@"popoverButtonSegue"]){ MyPopoverFirstTableViewController *popoverFirstTVC = [[MyPopoverFirstTableViewController alloc] init]; popoverFirstTVC = segue.destinationViewController; popoverFirstTVC.property1 = aProperty1; popoverFirstTVC.property2 = aProperty2; } } 我的问题是,我得到一个错误,因为目标控制器不是我的popoverFirstTableViewController,但NavigationController和导航控制器当然不haver“property1”和“property2”。 也许这是一个基本的问题,但我卡在这里。 我该怎么做configuration我的tableview通过分配一些它的属性,当这个表是在导航控制器中定义的?

popupIOS7 navigatinBar tintColor变化

我开发了iPad应用程序。 我用导航控制器在popover中打开一些屏幕。 但是我没有改变IOS7中的navigationcontroller tint color。我怎样才能改变这种颜色。 感谢名单 UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:airportsSearch] autorelease]; navigationController.navigationBar.barTintColor = [UIColor blackColor]; navigationController.navigationBar.translucent = NO; self.popOver=[[UIPopoverController alloc] initWithContentViewController:navigationController]; self.popOver.delegate = self; [self.popOver setPopoverContentSize:CGSizeMake(285, 370)]; [self.popOver presentPopoverFromRect:tempButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];

embedded导航控制器

我刚刚更新我的Xcode从4.2到4.3.3,我不断遇到一个问题是有可能在一个单一的视图应用程序中添加一个导航控制器,因为当我试图embedded到控制器没有任何反应。 我想有两个视图控制器通过button连接到第二个控制器和导航栏回到第一个视图控制器。 我想不出任何其他方式来连接视图控制器,请帮助我的任何想法。

我如何从导航控制器中删除一个视图

我想调用一个新的视图控制器,并从导航控制器堆栈中删除当前的视图控制器。 例如。 我在视图控制器A和我打电话B. 现在我已经在堆栈A,B了。现在我想打电话给C(从B)。 我想堆栈是A,C 谢谢。

iOS故事板传递数据navigationViewController

我在视图之间正确的传递数据有问题,但没有标准的方式。 描述我的问题的图片: 我使用两个segue标识符之一执行SegueWithIdentifier,然后我想将数据传递给ViewController,名为“Firmy”或“Oddzialy”。 通过数据代码: – (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) { FirmyVC *firmyVC = [segue destinationViewController]; firmyVC.tabFirmy = self.tabFirmy; } if ([[segue identifier] isEqualToString:@"sLogowanieOddzialy"]) { OddzialyVC *oddzialyVC = [segue destinationViewController]; oddzialyVC.wybranaFirma = [self.tabFirmy objectAtIndex:0]; } } 问题是用方法[segue destinationViewController] becouse destinationViewController for segue是NavigationViewController。 那么传递数据和独立导航控制器的正确方法是什么?