Использование календаря Kal без инициализации (и т. Д.) В AppDelegate - PullRequest
0 голосов
/ 20 сентября 2010

Я использую календарь Кал .Для кода, показанного ниже, я имею в виду пример праздника.В этом примере распределение и инициализация Kal выполняется в applicationDidFinishLaunching в AppDelegate.Протокол UITableViewDelegate (например, didSelectRowAtIndexPath) также расположен в классе AppDelegate.

AppDelegate:

#import "HolidayAppDelegate.h"
#import "HolidaySqliteDataSource.h"
#import "HolidaysDetailViewController.h"
## Heading ###import "Kal.h"

@implementation HolidayAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
  kal = [[KalViewController alloc] init];

  kal.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStyleBordered target:self action:@selector(showAndSelectToday)] autorelease];
  kal.delegate = self;
  dataSource = [[HolidaySqliteDataSource alloc] init];
  kal.dataSource = dataSource;

  // Setup the navigation stack and display it.
  navController = [[UINavigationController alloc] initWithRootViewController:kal];
  [window addSubview:navController.view];
  [window makeKeyAndVisible];
}

// Action handler for the navigation bar's right bar button item.
- (void)showAndSelectToday
{
  [kal showAndSelectDate:[NSDate date]];
}

#pragma mark UITableViewDelegate protocol conformance

// Display a details screen for the selected holiday/row.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  Holiday *holiday = [dataSource holidayAtIndexPath:indexPath];
  HolidaysDetailViewController *vc = [[[HolidaysDetailViewController alloc] initWithHoliday:holiday] autorelease];
  [navController pushViewController:vc animated:YES];
}

#pragma mark -

- (void)dealloc
{
  [kal release];
  [dataSource release];
  [window release];
  [navController release];
  [super dealloc];
}

@end

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

В моем проекте, основанном на навигации, у меня есть главное представление, RootViewController.Оттуда я хочу поместить представление Kal в стек.В настоящее время я помещаю дополнительный ViewController в стек.В методе viewWillAppear из этого ViewController я делаю вещи, показанные в коде выше.Появляются следующие проблемы:

  • Навигация назад должна быть сделана два раза (одна для календаря Kal, другая для моего созданного представления)
  • Переход к моему основному представлению больше невозможен

В данный момент я не знаю, куда поместить этот код.Поэтому вопрос в том, куда поместить методы выделения / инициализации, а также методы для протокола UITableViewDelegate.

Решение:

if (kal == nil) {
    kal = [[KalViewController alloc] init];
    kal.navigationItem.title = NSLocalizedString(@"Timetable",@"");
    kal.delegate = self;
    self.dataSource = [[[MyDataSource alloc] init] autorelease];
    kal.dataSource = dataSource;
}
[[self navigationController] pushViewController:kal animated:YES];

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

Предлагаем прочитать пример SimpleEKDemo от Apple.

0 голосов
/ 23 сентября 2010

Я сделал инициализацию в моем RootViewController.Это не лучшее решение, но я не нашел другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...