Мне любопытно, есть ли у кого-нибудь идеи по управлению несколькими ViewControllers из TableView. У меня есть список примерно из семи элементов, которые я отображаю в TableView с ViewController, посвященным каждому. Моя первая мысль - инициализировать массив различными ViewControllers.
NSMutableArray *viewControllers = [[NSMutableArray alloc] initWithCapacity:7];
[viewControllers addObject:[[ViewController1 alloc] initWithNibName:@"View1" bundle:nil]];
[viewControllers addObject:[[ViewController2 alloc] initWithNibName:@"View2" bundle:nil]];
...
Затем ссылка на этот массив для загрузки соответствующего представления при выборе элемента.
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self.navigationController pushViewController:[viewControllers objectAtIndex:indexPath.row] animated:YES];
}
Я действительно не уверен, что это подходящий подход. Любое направление было бы замечательно.
РЕДАКТИРОВАНИЕ:
Основываясь на отзывах Райана и Джо, я реализовал объект для хранения элементов таблицы. Сокращение моей проблемы также вызвало некоторую путаницу в деталях реализации. Добавлено полное решение для управления обоими контроллерами представления и выбора элементов панели вкладок.
TableNavigationItem.h
#import
@interface TableNavigationItem : NSObject {
NSString *title;
NSNumber *tabIndex;
id viewController;
}
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSNumber *tabIndex;
@property (nonatomic, retain) id viewController;
@end
TableNavigationItem.m
#import "TableNavigationItem.h"
@implementation TableNavigationItem
@synthesize title;
@synthesize viewController;
- (id) init{
if(self = [super init]){
self.title = @"";
}
return self;
}
- (void) dealloc {
[title release];
[tabIndex release];
[viewController release];
[super dealloc];
}
@end
Затем инициализируйте согласно предложению Джо.
NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:7];
TableNavigationItem *navItem;
// view 1
navItem = [[TableNavigationItem alloc] init];
navItem.title = @"View 1";
navItem.tabIndex = [NSNumber numberWithInt:1];
[mutableArray addObject:navItem];
[navItem release];
// view 2
navItem = [[TableNavigationItem alloc] init];
navItem.title = @"View 2";
navItem.viewController = [ViewController2 class]];
[mutableArray addObject:navItem];
[navItem release];
...
// store the navigation items
self.tableItems = [NSArray arrayWithArray:mutableArray];
[mutableArray release];
Тогда
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
TableNavigationItem *navItem = [tableItems objectAtIndex:indexPath.row];
if(navItem.viewController != nil){
[self.navigationController pushViewController:[[[navItem.viewController alloc] init] autorelease] animated:YES];
}
else if(navItem.tabIndex != nil){
[((MyAppDelegate *)[UIApplication sharedApplication].delegate).tabBarController setSelectedIndex:[navItem.tabIndex integerValue]];
}
}