在哪里处理UIApplication子视图的事件

时间:2014-11-13 07:03:57

标签: ios objective-c uiapplication

在研究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属性。

2 个答案:

答案 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]

获取活动控制器