我有一个指针UIView.我如何访问它UIViewController? [self superview]是另一个UIView,但不是UIViewController,对吧?
考虑以下场景:我有一个基于故事板的应用程序.我将一个ViewController对象添加到storyboard中,将此ViewController的类文件添加到项目中,并在IB身份检查器中指定新类的名称.现在我将如何从AppDelegate以编程方式引用此ViewController?我已经使用相关类创建了一个变量并将其转换为IBOutlet属性,但我没有看到任何方法能够在代码中引用新的ViewController - 任何尝试按住Ctrl键拖动连接都不起作用.
即在AppDelegate中我可以像这样到达基本的ViewController
(MyViewController*) self.window.rootViewController
Run Code Online (Sandbox Code Playgroud)
但故事板中包含的任何其他ViewController怎么样?
UIViewController屏幕上的当前需要通过设置徽标视图来响应来自APN的推送通知.但我怎么能得到UIViewControllerin方法application:didReceiveRemoteNotification:AppDelegate.m?
我尝试使用self.window.rootViewController获取当前显示UIViewController,它可能是一种UINavigationViewController或其他类型的视图控制器.我发现可以用来获取屏幕上的visibleViewController属性.但如果它不是,我该怎么办?UINavigationViewControllerUIViewControllerUINavigationViewController
任何帮助表示赞赏!相关代码如下.
AppDelegate.m
...
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
//I would like to find out which view controller is on the screen here.
UIViewController *vc = [(UINavigationViewController *)self.window.rootViewController visibleViewController];
[vc performSelector:@selector(handleThePushNotification:) withObject:userInfo];
}
...
Run Code Online (Sandbox Code Playgroud)
ViewControllerA.m
- (void)handleThePushNotification:(NSDictionary *)userInfo{
//set some badge view here
}
Run Code Online (Sandbox Code Playgroud) 在我的情况下,父UIViewController包含UIPageViewController哪个包含UINavigationController哪个包含UIViewController.我想向最后一个视图控制器添加滑动手势,但滑动处理就像它们属于页面视图控制器一样.我尝试以编程方式和通过xib执行此操作,但没有结果.
据我了解,在UIPageViewController处理手势之前我无法实现目标.如何解决这个问题?
uiviewcontroller uigesturerecognizer ios uipageviewcontroller
假设我有一个包含UINavigationController初始视图控制器的故事板.它的根视图控制器是子类UITableViewController,它是BasicViewController.它已IBAction连接到导航栏的右侧导航按钮
从那里我想使用故事板作为其他视图的模板,而无需创建其他故事板.假设这些视图具有完全相同的接口,但具有类的根视图控制器,SpecificViewController1并且SpecificViewController2是其子类BasicViewController.
除了IBAction方法之外,这两个视图控制器将具有相同的功能和接口.
它将如下所示:
@interface BasicViewController : UITableViewController
@interface SpecificViewController1 : BasicViewController
@interface SpecificViewController2 : BasicViewController
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
我可以实例化故事板BasicViewController但是具有根视图控制器的子类SpecificViewController1和SpecificViewController2?
谢谢.
我目前正在制作一个具有多个计时器的应用程序,基本上都是相同的.
我想创建一个自定义类,它使用定时器的所有代码以及布局/动画,因此我可以有5个相同的定时器,它们彼此独立地运行.
我使用IB(xcode 4.2)创建了布局,并且定时器的所有代码当前都在viewcontroller类中.
我很难将我的大脑包装成如何将所有内容封装到自定义类中,然后将其添加到viewcontroller,任何帮助都将非常感激.
我是IOS的新手,最近开始使用Xcode 4.5.我看到每个viewController我都可以设置一些身份变量,包括故事板ID.这是什么以及如何使用它?

我开始在stackoverflow上搜索,但找不到任何解释.我认为这不仅仅是一些愚蠢的标签,我可以设置为记住我的控制器吗?它有什么作用?
在我的视图控制器代码中,我如何区分:
这两个presentingViewController和isMovingToParentViewController是YES在这两种情况下,所以都不是很有益的.
令我感到困惑的是,我的父视图控制器有时是模态的,在其上推送要检查的视图控制器.
事实证明我的问题是我将我HtmlViewController的UINavigationController内容嵌入了一个然后呈现的内容.这就是为什么我自己的尝试和下面的好答案都不起作用的原因.
HtmlViewController* termsViewController = [[HtmlViewController alloc] initWithDictionary:dictionary];
UINavigationController* modalViewController;
modalViewController = [[UINavigationController alloc] initWithRootViewController:termsViewController];
modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:modalViewController
animated:YES
completion:nil];
Run Code Online (Sandbox Code Playgroud)
我想我最好告诉我的视图控制器何时是模态,而不是试图确定.
objective-c uiviewcontroller uinavigationcontroller ios swift
在2011年WWDC会话102,苹果推出视图控制器遏制,这是创建定制的视图控制器容器的能力,类似于UITabBarController,UINavigationController和类似物.
我多次看过这些例子.有一系列与这种模式相关的方法,但有点难以弄清楚它们.我将在这里发布我认为正在发生的事情,看看社区是否会确认或否定我的怀疑.
场景1:从无父节点移动到新的父视图控制器
[vc willMoveToParentViewController:self];
[self addChildViewController:vc];
[self.view addSubview:vc.view]; // or something like this.
[vc didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
前两行必须按给定的顺序发生,还是可以反转?
场景2:从父视图控制器移动到没有父视图控制器
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)
还有必要打电话[vc didMoveToParentViewController:nil]吗?会话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 addSubview:vc.view];
[vc didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)
问题
我的主要问题是:一般来说,视图控制器包含应该如何工作?上面给出的机制是否正确?
是否有必要在打电话willMoveToParentViewController前打电话addChildViewController?这对我来说似乎是合乎逻辑的顺序,但它是否是必要的?
打电话didMoveToParentViewController:nil后有必要打电话removeFromParentViewController吗?
当使用时解除模态视图控制器时dismissViewController,可以选择提供完成块.是否有相似的等价物popViewController?
完成论证非常方便.例如,我可以使用它来阻止从tableview中删除一行,直到模态关闭屏幕,让用户看到行动画.从推出的视图控制器返回时,我想要同样的机会.
我已经尝试放置popViewController一个UIView动画块,我可以访问完成块.但是,这会对弹出的视图产生一些不必要的副作用.
如果没有这样的方法,有什么办法吗?
uiviewcontroller ×10
ios ×9
iphone ×3
objective-c ×3
storyboard ×3
uiview ×3
cocoa-touch ×2
ios5 ×2
xcode ×2
class ×1
debugging ×1
swift ×1