2010-06-07 2 views
0

Уважаемый всех, я новичок в объективе-j/c и cappuccino, не совсем уверен, как все это подходит.Objective-J Cappuccino хочет список кнопок в главном меню, когда я нажимаю кнопку панели, обновляется с помощью выбранного пользовательского интерфейса.

ниже код взят из http://github.com/jfahrenkrug/CappuccinoLocations1 Что мне нужно сделать, это:

мне нужно посадкой главного меню, которое является CPView называется т.е. MainView с пятью или около кнопок, при нажатии кнопки на LocationButton на MainView заменяет MainView с помощью LocationView, который отображает содержимое работы jfahrenkrug. Аналогичный эффект будет происходить друг с другом.

Какова правильная цель-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; 

} 

ответ

1

Я не уверен, я понимаю ваш вопрос, но по существу окно имеет вид по умолчанию называется представление содержимого. Вы получите это так:

var contentView = [theWindow contentView]; 

К просмотру содержимого вы можете добавить subviews (и кнопки).

[contentView addSubview:myLocationView]; 

Местоположение этих подзонов определяется «фреймом» подсмотра.

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

Вы можете заменить подвиды представления содержимого с чем-то другим, либо удалив предыдущие взгляды или используя сообщение setSubviews.

[contentView setSubviews:[aButton, anotherButton]]; 

Так, по существу, если вы хотите поменять один вид на другой, называют «setSubviews» на своей супер взгляд с новыми взглядами, которые вы хотите. Надеюсь, что это поможет вам начать.

+0

sadly winging это не работает, у меня есть объективная книга c и изучение этого языка и API. Хотя ваш ответ действительно помог! thnx (http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf) – Setori

+0

оказался проблемой несовместимости браузера - хорошо работает на сафари – Setori