Как подтолкнуть UITableView без UITableViewController - PullRequest
0 голосов
/ 12 декабря 2011

Мое приложение состоит из экранов, как показано на прикрепленном изображении.

Я вручную добавил объект UITableView в качестве подпредставления в UIViewController и реализовал источник данных и делегат для UITableView A. Он может отображать данные и корректно реагировать на события касания.

Мне нужно сдвинуть еще один уровень вниз при касании строки в UITableView A.

Однако, поскольку я использую UITableViewController, как я могу выдвинуть UITableView?

Из-за ограничений нельзя передавать в другой UIViewController из текущего UIViewController.

Я понимаю, что это довольно сложно и запутанно. Я просто хочу переключиться с UITableView A на UITableView B.

Цените это, если вы можете предложить мне руку помощи. Спасибо.

enter image description here

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

@ Анкит Шривастава: все возможно

В didSelectRowAtIndexPath создайте тот же экземпляр табличного представления и отправьте его оттуда, обновив источник данных для этой конкретной строки.Если вам нужна дополнительная помощь, дайте мне знать.Я делал это раньше.

Например, если ваш контроллер табличного представления называется RootViewController, ваш didSelectRowAtIndexPath метод должен выглядеть следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([[self.navigationController viewControllers] count] < 3) {
    RootViewController *detailViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
    detailViewController.rootArray = [self.rootArray objectAtIndex:indexPath.row];
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController release];
    }
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

и numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [rootArray count];
}

rootArray - это массив, содержащий информацию, отображаемую в текущем контроллере табличного представления, и создается из мастер-массива, ранее созданного в делегате или любом другом мастер-классе с доступом к вашему контроллеру.Вот так (созданный в делегате в моем примере):

NSArray *array1 = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
    NSArray *array2 = [NSArray arrayWithObjects:@"4", @"5", nil];
    NSArray *array3 = [NSArray arrayWithObjects:@"6", @"7", nil];
    NSArray *array4 = [NSArray arrayWithObjects:@"8", @"9", nil];
    NSArray *array5 = [NSArray arrayWithObjects:@"10", @"11", @"12", nil];
    NSArray *array6 = [NSArray arrayWithObjects:@"14", @"15", @"13", nil];
    NSArray *array7 = [NSArray arrayWithObjects:@"16", @"17", nil];
    NSArray *array8 = [NSArray arrayWithObjects:@"19", @"18", nil];
    NSArray *array9 = [NSArray arrayWithObjects:@"20", @"21", @"22", nil];

    NSMutableArray *mutable1 = [NSMutableArray arrayWithObjects:array1, array2, array3, nil];
    NSMutableArray *mutable2 = [NSMutableArray arrayWithObjects:array4, array5, array6, nil];
    NSMutableArray *mutable3 = [NSMutableArray arrayWithObjects:array7, array8, array9, nil];

    self.initialArray = [NSMutableArray arrayWithObjects:mutable1, mutable2, mutable3, nil];

И viewDidLoad для текущего tableViewController, поэтому у вас есть массив для первой загрузки:

- (void)viewDidLoad
{
    [super viewDidLoad];
    YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    if ([[self.navigationController viewControllers] count] == 1) {
        self.rootArray = appDelegate.initialArray;
    }
}
0 голосов
/ 12 декабря 2011

Вы пытались использовать tableViewController?Может быть, имея tableViewController, не влияя на вашу иерархию представлений?Используйте tableViewController, но добавьте tableview в качестве подпредставления к представлению вашего UIViewController - это то, что я предполагаю, что вы в настоящее время делаете.

Или, если вы хотите только переключить их, просто добавьте два представления таблицы и чередуйте их видимость?

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