2009-07-24 4 views
2

Я пытаюсь создать представление программно. Результат, который я хочу иметь, - это просмотр прокрутки с внутренним просмотром таблицы. И под этим столом зрения я хочу, чтобы добавить некоторые кнопкиДобавить кнопки под таблицей

Я не знаю, как именно это сделать, что я попытался это, но он не работает:

- (void)loadView { 
    [super loadView]; 

    tableView = [[UITableView alloc] initWithFrame:[[self view] bounds] style:UITableViewStyleGrouped]; 
    [tableView setDelegate:self]; 
    [tableView setDataSource:self]; 

    scrollView = [[UIScrollView alloc] initWithFrame:[[self view] bounds]]; 
    //[scrollView setBackgroundColor:[UIColor blackColor]]; 
    [scrollView setBouncesZoom:YES]; 

    deconnectButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [deconnectButton setTitle:@"Deconect" forState:UIControlStateNormal]; 
    [deconnectButton setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 

    //[deconnectButton addTarget:self action:action forControlEvents:UIControlEventTouchUpInside]; 
    deconnectButton.frame = tableView.frame; 
    NSLog(@"Tableview frame : %@", NSStringFromCGRect(tableView.frame)); 

    [scrollView addSubview:deconnectButton]; 

    [scrollView addSubview:tableView]; 


    [[self view] addSubview:scrollView]; 


} 

Что я упускаю или делаю неправильно?

ответ

16

На самом деле я нашел решение. tableview имеет свойство tableFooterView. Все, что вам нужно сделать, это:

-Создание UIView -Добавить кнопку с этой точкой зрения -Finaly установить его на tableFooterView

Вот код:

tableView = [[UITableView alloc] initWithFrame:[[self view] bounds] style:UITableViewStyleGrouped]; 
[tableView setDelegate:self]; 
[tableView setDataSource:self]; 

// create a UIButton (Deconnect button) 
UIButton *btnDeco = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnDeco.frame = CGRectMake(0, 0, 280, 40); 
[btnDeco setTitle:@"Déconnecter" forState:UIControlStateNormal]; 
btnDeco.backgroundColor = [UIColor clearColor]; 
[btnDeco setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 
[btnDeco addTarget:self action:@selector(deconnect:) forControlEvents:UIControlEventTouchUpInside]; 

// create a UIButton (Change pseudo button) 
UIButton *btnChange = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnChange.frame = CGRectMake(0, 50, 280, 40); 
[btnChange setTitle:@"Changer Pseudo" forState:UIControlStateNormal]; 
btnChange.backgroundColor = [UIColor clearColor]; 
[btnChange setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal]; 
[btnChange addTarget:self action:@selector(changePseudo:) forControlEvents:UIControlEventTouchUpInside]; 


//create a footer view on the bottom of the tabeview 
UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(20, 0, 280, 100)]; 
[footerView addSubview:btnDeco]; 
[footerView addSubview:btnChange]; 

tableView.tableFooterView = footerView; 
[footerView release]; 

[[self view] addSubview:tableView]; 
2

Следует отметить, что UITableView является подклассом UIScrollView, поэтому вам, вероятно, придется управлять размером UITableView по-другому, чем если бы вы просто позволяли ему выполнять прокрутку.

Ваш код, похоже, устанавливает tableView и deconnectButton того же размера, и этот размер является размером элемента управления scrollView. Я ожидал бы, что это повлияет на tableView, скрывая кнопку.

Основываясь на том, что вы описываете, это звучит так, как будто вы должны рассчитать, какой размер таблицы должен быть основан на ее содержимом, а затем соответствующим образом установить его фрейм. Затем установите рамку кнопки чуть ниже этого. Кроме того, вам нужно будет установить размер scrollView, используя его свойство contentSize. Проблема в этом сценарии заключается в том, что вам придется всегда сохранять размер scrollView и положение кнопки в синхронизации с размером таблицыView.

Вы можете исследовать, как сделать последнюю строку в таблице кнопкой и исключить внешний вид прокрутки. В итоге это может привести к уменьшению количества кода.

1

Если вы у UITableView внутри UINavigationController вы можете установить элементы панели инструментов внизу вашего UITableViewController/UIViewController.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:nil action:nil]; 
self.toolbarItems = @[barButton]; 

Пожалуйста, помните, чтобы показать панель инструментов, а так:

self.navigationController.toolbarHidden = NO; 

//or animated 
[self.navigationController setToolbarHidden:NO animated:YES]; 

Это, вероятно, чище, чем хакерство вид ниже таблице.

Смежные вопросы