0

亲爱的,我是 Objective-j/c 和卡布奇诺的新手,我不确定这一切是如何结合在一起的。

下面的代码取自http://github.com/jfahrenkrug/CappuccinoLocations1 我需要做的是:

我需要一个登陆主菜单,它是一个名为 ie MainView 的 CPView,有五个左右的按钮,当您单击 MainView 上的 LocationButton 时,会用 LocationView 替换 MainView,它显示 jfahrenkrug 的工作内容。类似的效果会发生在其他按钮上。

处理这种方法的正确 Objective-c/j 方法是什么?

@import <Foundation/CPObject.j>
@import "src/Location/LocationView.j"

@implementation AppController : CPObject
{
  LocationView locationView;
}

- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
    var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero()          styleMask:CPBorderlessBridgeWindowMask],
      mainContentView = [theWindow locationView],
      bounds = [locationView bounds];


[mainContentView setBackgroundColor:[CPColor colorWithRed:212.0 /255.0 green:221.0/ 255.0 blue:230.0/255.0 alpha:1.0]];

locationView = [[LocationView alloc]    initWithFrame:CGRectMake(0,0,920.0,590.0)];
[locationView setCenter:[mainContentView center]];
[locationView setBackgroundColor:[CPColor whiteColor]]
[locationView setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin |     CPViewMinYMargin | CPViewMaxYMargin];

var shadow = [[CPShadowView alloc] initWithFrame:CGRectMakeZero()];
[shadow setFrameForContentFrame:[locationView frame]];
[shadow setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin];
[mainContentView addSubview:shadow];
[mainContentView addSubview:locationView];

[theWindow orderFront:self];

}

现在我们有了 locationView.j

@import "LocationsController.j"
@import "LocationListView.j"
@import "MapController.j"
@import "LocationsToolbar.j"
@import "LocationDetailView.j"
@import "LocationDetailController.j"

@implementation LocationView : CPView
{
  LocationsController locationsController;
  LocationListView locationListView;
  MapController mapController;
  MKMapView mapView;
  CPTextField coordinatesLabel;
  LocationsToolbar locationsToolbar;
  LocationDetailView locationDetailView;
  LocationDetailController locationDetailController;
  CPTextField searchField;

  //  id delegate @accessors;
}

- (id)initWithFrame:(CGRect)aFrame
{
  self = [super initWithFrame:aFrame];
  if(self){

    locationsController = [[LocationsController alloc] init];
    [locationsController loadExampleLocations];

    locationListView = [[LocationListView alloc]    initWithFrame:CGRectMake(0.0,0.0,226.0,400.0)];
    [locationListView setContent:[locationsController locations]];
    [locationListView setDelegate:locationsController];
    [locationsController setLocationListView:locationListView];

    var locationScrollView = [[CPScrollView alloc]  initWithFrame:CGRectMake(10.0,65.0,243.0,400.0)];
    [locationScrollView setDocumentView:locationListView];
    [locationScrollView setAutohidesScrollers:YES];
    [[locationScrollView self] setBackgroundColor:[CPColor whiteColor]];
    [self addSubview:locationScrollView];

    mapController = [[MapController alloc] init];

    mapView = [[MKMapView alloc] initWithFrame:CGRectMake(510,65,400,400) apiKey:''     ];
    [mapView setDelegate:self];
    mapController.mapView = mapView;
    [self addSubview:mapView];

    coordinatesLabel = [[CPTextField alloc]     initWithFrame:CGRectMake(510,465,200,35)];
    [coordinatesLabel setTextColor:[CPColor colorWithHexString:@"009900"]];
    [coordinatesLabel setFont:[CPFont systemFontOfSize:14.0]];
    [coordinatesLabel setEditable:NO];
    [coordinatesLabel setStringValue:@"-/-"];
    [mapController setCoordinatesLabel:coordinatesLabel];
    [self addSubview:coordinatesLabel];

    locationsToolbar = [[LocationsToolbar alloc]    initWithFrame:CGRectMake(10.0,467.0,226.0,25.0)];
    [locationsToolbar setDelegate:locationsController];
    [self addSubview:locationsToolbar];

    locationDetailController = [[LocationDetailController alloc] init];
    locationDetailController.mapController = mapController;
    locationsController.locationDetailController = locationDetailController;
    [mapController setDelegate:locationDetailController];

    locationDetailView = [[LocationDetailView alloc]    initWithFrame:CGRectMake(510,490,400,90)];
    [locationDetailView setDelegate:locationDetailController];
    [locationDetailController setLocationDetailView:locationDetailView];
    [self addSubview:locationDetailView];

    searchField = [CPTextField roundedTextFieldWithStringValue:@""  placeholder:@"Location" width:200.0];
    [searchField setFrameOrigin:CGPointMake(510.0,35.0)];
    [searchField setDelegate:self];
    [self addSubview:searchField];

    var searchButton = [[CPButton alloc]    initWithFrame:CGRectMake(710.0,37.0,60.0,24.0)];
    [searchButton setTitle:"Search"];
    [searchButton setTarget:self];
    [searchButton setAction:@selector(searchLocation)];
    [self addSubview:searchButton];

  }
  return self;

}
4

1 回答 1

1

我不确定我是否理解您的问题,但本质上一个窗口有一个称为内容视图的默认视图。你得到它是这样的:

var contentView = [theWindow contentView];

您可以向内容视图添加子视图(和按钮)。

[contentView addSubview:myLocationView];

这些子视图的位置由子视图的“框架”确定。

[myLocationView setFrame:CGRectMake(10, 10, 100, 100)];

您可以通过删除以前的视图或使用 setSubviews 消息将内容视​​图的子视图替换为其他内容。

[contentView setSubviews:[aButton, anotherButton]];

因此,本质上,如果您想将一个视图换成另一个视图,请在其超级视图上使用您想要的新视图调用“setSubviews”。希望这有助于您入门。

于 2010-06-08T02:36:00.533 回答