基于这些自定义视图中的按钮在单个自定义视图中加载不同视图

时间:2013-05-02 05:18:39

标签: objective-c cocoa nsview key-value-observing nsviewcontroller

在我的项目中,我只有一个窗口,在该窗口中我只有一个自定义视图,除此之外别无其他。在该自定义视图中,我正在加载一个默认视图,在该默认视图中,我有一个Button。执行该按钮IBAction时,必须显示当前自定义视图,并且必须在该窗口的同一自定义视图中加载新视图。

对于这些我试过这样的, 我的app委托是我的窗口控制器,因为我声明了一个全局变量并为其观察写了KVO,当它的值被改变时。在那个观察方法中,我试图根据我在全局变量中的值的要求加载不同的xib(自定义视图)。

除了这些,我还有不同的ViewControllers来控制不同的视图。在该视图控制器类中,我通过使用AppDelegate类的对象将新值加载到该全局变量中。

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{    
    NSLog(@"entered into key value observing");
    if ([viewName isEqualToString:@"LoginView"]) {
        NSLog(@"Dont change the current view");
    } else {
        NSLog(@"Load new view in customView");
        [self loadNewView];
    }
}

-(void)loadNewView
{
    NSLog(@"entered into login in method");
    [[_viewController view] removeFromSuperview];
    _viewController=[[NSViewController alloc] initWithNibName:@"NewView" bundle:nil];

    [self.window setContentSize:_viewController.view.frame.size];
    [_customView addSubview:[_viewController view]];
    NSLog(@"at final step");
}

Control正在从ViewController类移动到AppDelegate,并且它也进入了那个KVO方法,它正在执行我希望它执行的每一行。但它不会影响输出结果。

据我所知,它正在使用AppDelegate的对象执行ViewController类本身的每一件事。因此,它不影响在该窗口中的CustomView中加载视图。

任何人都可以建议我解决这些问题的解决方案........

1 个答案:

答案 0 :(得分:0)

问题不在上面问题中显示的代码中。

在上面的NSViewController代码实例中,为了同样的目的,一次又一次地创建。与此同时尝试使用共享实例在ViewController类中创建appDeligate的对象。