Я работаю над простым приложением для iPhone уже несколько дней, и мне не удавалось обдумать интерфейс. В частности, у меня есть представление главного меню с ImageView и несколько кнопок, которые в конечном итоге переключатся на другие представления.
В дополнение к главному меню у меня есть подкласс UIViewController под названием Browse_Phone (это универсальное приложение), и он содержит UITableView с именем tableView. В конечном итоге он будет подключен к базе данных, но на данный момент содержимое таблицы жестко запрограммировано. Ниже приведен код делегата таблицы в Browse_Phone.m (большая часть этого кода заимствована из онлайн-примеров):
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
NSString *szCell = [[NSString alloc] initWithFormat: @"Row %i", indexPath.row ];
cell.textLabel.text = szCell;
[szCell release];
// Set up the cell
return cell;
}
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])
{
self.title = @"Browse";
tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
tableView.delegate = self;
tableView.dataSource = self;
self.view = tableView;
}
return self;
}
Наконец, в главном окне есть кнопка для смены представления главного меню с контроллером навигации, который использует контроллер Browse_Phone в качестве своего RootViewController (обратите внимание, что [superview отправителя] является представлением главного меню):
- (IBAction)loadBrowse:(id)sender
{
Browse_Phone *browsePhone = [[[Browse_Phone alloc] initWithNibName:nil bundle:nil] autorelease];
if(browsePhone.view)
{
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:browsePhone] autorelease];
CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:window cache:YES];
[[sender superview] removeFromSuperview];
[window addSubview:navController.view];
[UIView commitAnimations];
}
}
Когда я нажимаю кнопку, видоискатель работает. Отражение происходит, как и ожидалось, и навигационный элемент управления загружен, но таблицы нигде не найти. Я знаю, что создается экземпляр контроллера Browse_Phone, потому что заголовок панели навигации соответствует заголовку таблицы. Когда я использовал этот код в простом приложении, которое только что загрузило контроллеры в didFinishLaunchingWithOptions делегата приложения, он работал просто отлично. Конечно, я знаю, что проблема будет чем-то простым, что я пропустил.
Заранее спасибо,
Ryan