在研究UIApplication时,我找到了一种在所有UIViewController之上添加视图的方法。
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(40,40,250,250)];
[testView setBackgroundColor:[UIColor redColor]];
[[[UIApplication sharedApplication] keyWindow] addSubview:testView];
显示正确。
我想知道我是否创建了一个带有一些按钮而不是testView的菜单。我在哪里可以处理 AppDelegate或当前ViewController
中的事件 If it is possible
然后告诉我如何点击菜单按钮change text of any ViewController
。
我的意思是如何获取另一个ViewController的上下文并从该按钮设置其View属性。
答案 0 :(得分:2)
是的,有可能。您可以添加按钮并设置其动作事件。然后,您可以使用NSNotificationCenter
添加观察者。然后,您可以按照所需的UIViewController
接收有关按钮点击的通知。
以下是代码:
添加如下按钮:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(40,40,250,250)];
[[[UIApplication sharedApplication] keyWindow] addSubview:button];
[button addTarget:self
action:@selector(doSomething)
forControlEvents:UIControlEventTouchUpInside];
按钮事件处理程序中的发布通知:
- (void)doSomething {
[[NSNotificationCenter defaultCenter] postNotificationName:@"buttonClicked" object:nil];
}
在另一个ViewController中接收通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourmethod) name:@"buttonClicked" object:nil];
然后在“你的方法”中,你可以改变文字。
答案 1 :(得分:0)
将子视图添加到keyWindow
是一个非常糟糕的主意,然后检索当前的viewControllers。可能你会下地狱。 (在iOS8窗口之前不改变边界和方向,现在它们会改变)
而不是它,创建根导航控制器的子类
将子视图添加到self.view
,并通过[self.viewControllers lastObject]