Tag: uiviewcontroller

你怎样才能重新加载视图控制器在Swift中解除模态表示的视图控制器?

我有第一个tableViewController打开了第二个tableViewcontroller点击一个单元格。 第二个视图控制器以模态方式呈现(Show Detail segue),并被解除: self.dismissViewControllerAnimated(true, completion: {}) 此时,第二个视图控制器滑开并显示其下的第一个视图控制器。 在这一点上,我想重新加载第一个视图控制器。 我明白,这可能需要使用委托function,但不知道如何进行。 在此先感谢您的帮助!

视图控制器之间的交互转换?

借助UIViewanimationAPI和视图控制器控制,当前的Cocoa Touch栈非常适合视图控制器之间的自动转换。 我发现很难写的是视图控制器之间的交互式转换。 作为一个例子,当我只想用另一个视图replace一个视图时,我可以使用UINavigationController或使用包含API并自己编写转换。 但是,我希望转换是交互式的,触摸控制是很常见的:用户开始拖动当前视图,传入视图从侧面出现,转换由平移触摸手势控制。 用户可以平移一些,以便在传入视图上“偷看”,然后平移,保持当前视图可见。 如果手势结束低于某个阈值,则转换被取消,否则完成。 (如果这还不够清楚,我正在讨论类似于iBooks中的页面转换,但是在不同的视图控制器之间,并且推广到任何这样的交互转换。 我知道如何编写这样的转换,但是当前的视图控制器必须知道转换的过多 – 它占用了太多的代码。 而且这甚至没有提到可能容易出现两种不同的交互式转换,在这种情况下,所讨论的控制器充满了转换代码,与之紧密相连。 有没有一种模式来抽象,概括交互转换代码,并将其转移到一个单独的类或代码块? 也许是图书馆,甚至?

为什么不自动从一个Nib加载的视图被didReceiveMemoryWarning发布之后呢?

我的iPad应用程序大量使用自动旋转。 这很棒。 但是,我注意到,如果一个隐藏的视图是由didReceiveMemoryWarning (如下所述)的默认实现释放的,当视图从笔尖重新加载,而我恰好处于横向时,它将以纵向加载。 这会对界面造成巨大的破坏,直到我手动旋转iPad并强制它进入正确的方向。 我曾经假设iOS会以当前的方向加载视图; 这就是应用程序启动时的function。 但不是, didReceiveMemoryWarning被卸载之后没有。 为什么不? 我怎样才能做到这一点?

处理用任何一种方式滑动的视图控制器

我正在构build一个适用于iOS6 +的应用程序。 该应用程序将在应用程序中的一个点上有一个主视图控制器。 我想这个主视图控制器处理一个左滑动,并在屏幕上向右滑动,然后显示另一个视图控制器。 是否有一个简单的方法来完成这个核心的iOS6 +,或者我应该寻找另一个库等 我已经在应用程序的其他地方使用了菜单样式的幻灯片。 我也明白,可以find一百万个替代品。 我正在寻找的是有一个视图控制器(在“中间”行事)。 然后,当他们左/右滑动另一个视图控制器显示。 然后,他们可以向相反方向滑动,或单击后退button返回到主控制器。 编辑- 具体来说,我正在寻找function来执行以下操作:预加载将滑入的控制器。当发生滑动(正在发生)…控制器通过触摸拖动/滑动。 同样的拖动/滑动发生的任何一种方式控制器被刷(左/右)。 编辑2 – 我正在寻找用手指拖动视图控制器的function。 取决于拖动的发生方式,它将拉动相同的视图控制器。 即布局将是:[用于拖动的VC] [主控制器] [用于拖动的VC]。 如果用户从左到右或从右到左滑动,则另一个控制器被拖动到顶部,并且可以使用相反的条目滑动返回到主控制器。

UIViewController扩展从storyboard实例化

我想在Swift中编写一个扩展来处理故事板中的UIViewController实例化。 我的想法如下:由于UIStoryboard的方法instantiateViewControllerWithIdentifier需要一个标识符来实例化一个给定的故事板的视图控制器,为什么不分配每个视图控制器在我的故事板一个标识符等于其确切的类名(即UserDetailViewController将有一个标识符“UserDetailViewController”),并在UIViewController上创build一个类方法,该方法将: 接受UIStoryboard实例作为唯一参数 获取当前类名称作为string 在类别名称作为参数在故事板实例上调用instantiateViewControllerWithIdentifier 获取新创build的UIViewController实例,并返回它 所以,而不是(它重复类名string,不是很好) let vc = self.storyboard?.instantiateViewControllerWithIdentifier("UserDetailViewController") as UserDetailViewController 这将是: let vc = UserDetailViewController.instantiateFromStoryboard(self.storyboard!) 我曾经在Objective-C中使用以下类别: + (instancetype)instantiateFromStoryboard:(UIStoryboard *)storyboard { return [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([self class])]; } 但是我完全被Swift版困住了。 我希望有一种方法可以做到这一点。 我尝试了以下内容: extension UIViewController { class func instantiateFromStoryboard(storyboard: UIStoryboard) -> Self { return storyboard.instantiateViewControllerWithIdentifier(NSStringFromClass(Self)) } } 返回Self而不是AnyObject允许types推断工作。 否则,我将不得不把这个方法的每一个返回,这是烦人的,但也许你有一个更好的解决scheme? 这给了我错误: Use of unresolved identifier 'Self' NSStringFromClass部分似乎是问题。 你怎么看? […]

logging项目中所有UIViewController的类名

我们收到了一个来自外包的巨大项目,我们正试图“修复”。 项目中有数百个视图控制器。 我们的目标是轻松确定我们目前正在设备上查看哪个课程。 我们的解决scheme(这不起作用,因此是SO问题)。 用下面的代码覆盖UIViewController的viewDidAppear方法: -(void)viewDidAppear:(BOOL)animated { NSLog(@"Current View Class: %@", NSStringFromClass(self.class)); [self viewDidAppear:animated]; //Also tried this: //[super viewDidAppear:animated]; } 这个类将放在项目的.pch中。 这将不需要在数百个视图控制器中放置额外的代码,并且可以轻松打开和closures。 这不起作用,因为,正如我们现在所知道的,< meme >不会简单地通过类别< / meme >覆盖现有的方法。 我们缺less什么?

是否有可能推视图控制器与完成块?

UINavigationController的文档不包含带有completion:参数的pushViewController方法。

以编程方式embeddedUIViewController?

我有一个带有容器视图的UIViewController的Storyboard设置,这样我就可以在其中embedded另一个UIViewController 。 在某些情况下,我需要更改embedded的视图控制器。 在我的故事板中,我的容器视图中不能有两个segues(只有一个embedded的segue)。 这导致我以编程方式进行。 我在我的故事板没有连接embeddedsegue我的容器视图。 现在从这一点,我怎样才能以编程方式embedded我select的UIViewController对象?

如何删除以前的ViewController

我是一名学生,编程相当新颖。 我正在尝试在业余时间学习Objective-C / Swift。 我用spriteKit做了一个游戏,它有多个菜单/场景。 我正试图从一个视图控制器转换到另一个。 要做到这一点,我用这个代码: @IBAction func PlayButtonPressed(sender: AnyObject) { let playStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let vc : UIViewController = playStoryboard.instantiateViewControllerWithIdentifier("playGame") as UIViewController self.presentViewController(vc, animated: true, completion: nil) } 这适用于转换到新的VC场景,但是,我相信以前的VC仍然在堆栈中占用内存,减慢了我的程序。 我读过其他一些post,你可以使用导航控制器来删除VC。 但是,我没有导航控制器; 只查看控制器。 我已经看到一些关于removeFromParentViewController()和view.removeFromSuperview() ,但我真的不知道如何实现它。 除此之外,我没有find我正在寻找的答案。 所以我问的问题是如何从堆栈中删除以前的VC? 任何帮助将是一个赞赏! (宁愿帮忙快点,但是Objective-C也会帮忙)谢谢! 注意参考:我相信在Objective-C我的代码看起来像这样: -(IBAction) PlayButtonPressed: (id) sender { UIStoryboard *playStoryboard = [UIStoryboard […]

ios:风景模式下两个视图控制器之间的自定义Segue

我有两个UIViewController包含在navigatoin视图控制器,并在横向模式。 我想在两个uiviewcontroller之间切换,而不需要像push这样的animation。 因此,如果用户在第一个视图控制器中单击一个button,则在这两者之间执行自定义search。 #import <Foundation/Foundation.h> #import "AppDelegate.h" @class AppDelegate; @interface NonAnimatedSegue : UIStoryboardSegue { } @property (nonatomic,assign) AppDelegate* appDelegate; @end 而这个实现: #import "NonAnimatedSegue.h" @implementation NonAnimatedSegue @synthesize appDelegate = _appDelegate; -(void) perform{ self.appDelegate = [[UIApplication sharedApplication] delegate]; UIViewController *srcViewController = (UIViewController *) self.sourceViewController; UIViewController *destViewController = (UIViewController *) self.destinationViewController; [srcViewController.view removeFromSuperview]; [self.appDelegate.window addSubview:destViewController.view]; self.appDelegate.window.rootViewController=destViewController; } @end […]