代码之家  ›  专栏  ›  技术社区  ›  Debajit

在Cocoa中动态加载窗口的一部分

  •  3
  • Debajit  · 技术社区  · 15 年前

    我有一个窗口区域(在mainmenu.xib中),我想在不同的时间点动态填充不相关的“视图”,如stable、ikimagebrowserview等,具体取决于用户选择的标准。

    • 我如何定义窗口的这个区域,以便它可以被不同的视图“替换”?
    • 如何将表格或其他视图附加到此窗口区域?

    (是否足够在那里放置一个通用nsview并每次添加一个子视图?我对可可还比较陌生,所以欢迎任何指点)

    3 回复  |  直到 11 年前
        1
  •  6
  •   Peter Hosey    15 年前

    在现代可可中,这是视图控制器的工作。 Cathy Shive 有一些关于他们的好博客文章( 1 , 2 , 3 )和合著者 a more useful view controller class 而不是基本的nsviewcontroller。

        2
  •  1
  •   Tom Dalling    15 年前

    有几种方法可以做到。我发现很容易放入“自定义nsview”,并用windowdidload中的真实视图替换它。看起来像这样:

    @interface MyController : NSWindowController
    {
        IBOutlet NSView* dummyView;
    }
    @end
    
    @implementation MyController
    -(void)windowDidLoad{
        NSView* actualView = ...; //create the real view here
        [actualView setFrame:[dummyView frame]];
        [actualView setAutoresizingMask:[dummyView autoresizingMask]];
    
        NSView* superview = [dummyView superview];
        [dummyView removeFromSuperview];
        [superview addSubview:actualView];
    
        dummyView = actualView; //just incase dummyView is ever used again
    }
    @end
    
        3
  •  0
  •   BenMorel mehmet cinar    11 年前

    就我个人而言,我会为2部分添加2个视图。假设一个TopView和一个BottomView使用InterfaceBuilder中的链接将它们链接到代码。从这里,您可以使用以下方式管理每个视图的内容:

    附加子视图 (是将接收uiview或对象的对象的函数)

    您可以使用它将单个对象或视图添加到两个主视图中,例如:

    [topView addSubview:roundedUIButton_instance];
    

    [topView addSubview:another_view_instance];
    

    从超级视图中删除 (是用于移除自身的对象的函数)

    [roundedUIButton_instance removeFromSuperview];
    

    [another_view_instance removeFromSuperview];