Используя кнопку с закругленными углами для нижнего колонтитула TableView в iPhone? - PullRequest
2 голосов
/ 23 декабря 2010

Я пытаюсь поместить кнопку в нижний колонтитул TableView.

Это то, что я сделал, и я не вижу кнопку, но отображается строка «РЕЗУЛЬТАТ».

Я перепробовал все, что мог придумать. но я не мог понять, что не так. Мне нужна твоя помощь!

- (void)viewDidLoad {
 btnSeeResult = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [btnSeeResult setTitle:@"RESULT" forState:UIControlStateNormal];

 viewResult = [[UIView alloc] initWithFrame:btnSeeResult.frame];
 [viewResult addSubview:btnSeeResult];

 self.tableView.tableFooterView = btnSeeResult;
}

-(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return viewResult.bounds.size.height;
}

В любом случае, в чем разница между настройкой вида нижнего колонтитула прямо как

tableView.tableFooterView = footerView;

и с использованием (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section метода ??

Ответы [ 2 ]

2 голосов
/ 23 декабря 2010

Нет никакой причины для оболочки viewResult. UIButton - это UIView, поэтому в данном случае нет причин переносить его в другой UIView - тем более, что вы затем назначаете кнопку свойству нижнего колонтитула таблицы, что означает, что таблица должна управлять тем, как и когда в конечном итоге отображается представление кнопки.

Возможно, вам придется установить рамку btnSeeResult так, чтобы она имела установленную высоту. Возможно, в этом случае высота равна 0, так как вы никогда не устанавливаете для него рамку. Вы также можете попробовать что-то вроде [btnSeeResult sizeToFit]; после того, как вы установите заголовок, который должен изменить его размер настолько, чтобы освободить место для текста надписи, по крайней мере.

Что касается вашего второго вопроса, разница между tableFooterView и -(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section состоит в том, что первый определяет представление для присоединения к нижней части всей таблицы, тогда как метод делегата позволяет вам давать каждый подраздел в вашем таблица разных нижних колонтитулов. Оба могут быть использованы одновременно, и в этом случае будет отображаться нижний колонтитул последнего раздела, а затем, наконец, tableFooterView.

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

SeniorLee,

Добро пожаловать в StackOverflow!

Вы получили правильный ответ на свой вопрос - это последний код:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

Когда отображается таблицаидет к построению вашей таблицы, он вызывает 2 класса - делегат таблицы и источник данных таблицы.

Источник данных - это именно то, что подразумевает название, - источник данных в вашей таблице.Делегат, с другой стороны, обрабатывает взаимодействие с таблицей в режиме реального времени и способ ее отображения (например, что происходит при нажатии строки?).

Во многих случаях программисты устанавливают оба параметра:Источник данных и делегат табличного представления одному и тому же классу - UITableViewController, которому принадлежит табличное представление.

В любом случае, на ваш вопрос:

Весьма вероятно, что прямое назначение не является 'не работает явно, потому что есть обратный вызов делегата.Когда табличное представление раскладывается, оно спрашивает своего делегата "есть ли у вас представление нижнего колонтитула в разделе x?".Это вышеописанный метод.

Если вы не реализуете этот метод, табличное представление будет иметь реализацию по умолчанию, которая что-то делает - в этом случае, вероятно, установите ее равной nil.

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

Кроме того, я не думаю, что вам нужно переносить UIButton в UIView - UIButton является подклассом UIView и, следовательно, должен работать простохорошо.

...