UIButton в заголовке UITableView игнорирует большинство касаний - PullRequest
15 голосов
/ 18 ноября 2008

У меня есть кнопка, которую я добавляю как подпредставление tableHeaderView табличного представления. Кнопка выглядит нормально, и нажатие и удерживание на ней работает с перебоями - по большей части, однако, она не отвечает. Я попытался добавить его как подпредставление самой таблицы; эффект примерно такой же. Я думал, что проблема может быть с сенсорным перехватом представления прокрутки, но отключение прокрутки на столе также не имеет никакого эффекта.

Я что-то не так делаю? Кто-нибудь еще сталкивался с этим?

edit - чтобы уточнить, я говорю о главном заголовке таблицы, а не заголовке раздела, в таблице сгруппированных стилей; думаю, что в основном смоделировано после экрана «Контакт».

Ответы [ 9 ]

23 голосов
/ 01 января 2010

У меня была такая же проблема. В моем случае у меня было представление контейнера в IB (которое было применено как заголовок табличного представления в коде), причем UIImageView занимает весь кадр этого контейнера. Кнопка неправильного поведения находилась в представлении изображения.

Оказывается, мне нужно было иметь размерные распорки в IB, установленные следующим образом ...

Вид контейнера: все внешние анкеры включены, изменение размеров салона - все отключено

Sub Image View: все стойки (внутри и снаружи)

У меня было несколько разных табличных представлений, все с использованием представлений заголовка. Некоторые правильно реагировали на сенсорные события, некоторые были нестабильны. Это решило мою проблему

11 голосов
/ 26 октября 2011

У меня была похожая проблема - текстовое поле и кнопка внутри представления, установленные как представление заголовка таблицы, которые не реагировали на события касания. setAutoResizing программно работал для меня.

Мой контроллер расширяет UITableViewController, и viewDidLoad выглядит так:

- (void)viewDidLoad
{
    [super viewDidLoad];

    MYCustomWidget *headerView = [[[NSBundle mainBundle] 
               loadNibNamed:@"MYCustomWidgetView" owner:self options:nil] 
               objectAtIndex:0];

    [headerView setAutoresizingMask:UIViewAutoresizingNone];

    self.tableView.tableHeaderView = headerView;
}

(«MYCustomWidget» расширяет UIView, а «MYCustomWidgetView» представляет собой файл XIB).

8 голосов
/ 19 ноября 2008

Я полностью не согласен с Wisequark - абсолютно ничего плохого с размещением кнопки в tableHeaderView, и включение одной из них не может привести к отклонению вашего приложения из магазина приложений. TableHeaderView разработан как произвольное представление, содержащее любые элементы, которые вы выбираете.

Что касается вашей проблемы, возможно, у вас есть вид, скрывающий вашу кнопку, или это просто ошибка, о которой следует сообщить в Apple.

3 голосов
/ 30 сентября 2015

Как ни странно, но вид заголовка таблицы видимо изменен неправильно. Я использую автоматическую разметку, поэтому маска с автоматическим изменением размера не была для меня опцией. После проверки моей иерархии представлений: enter image description here

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

enter image description here

Ручное обновление его высоты исправило проблему:

- (void)viewDidLayoutSubviews {
    CGRect frame = self.tableView.tableHeaderView.frame;
    frame.size.height = 116.0;
    self.tableView.tableHeaderView.frame = frame;
}

enter image description here

Кроме того, высота заголовка табличного представления может стать недействительной после изменения ориентации. Эта проблема также может быть исправлена ​​с помощью предоставленного решения.

2 голосов
/ 11 января 2012

Моя ситуация была похожа на ситуацию с Дэнни Холлом (представление заголовка таблицы представляло собой UIImageView, а был UIButton, который был подвидом UIImageView). В моем случае проблема, кажется, была вызвана тем, что кнопка является подпредставлением просмотра изображения. Для меня работало создание «содержащего» представления UIView, чтобы как представление изображения, так и кнопка были подпредставлениями «содержащего» представления. странно.

1 голос
/ 25 октября 2013

tableHeaderView имеет 0 высоту во время обработки рисования в UITableView

используйте этот UIView подкласс, чтобы установить сильную постоянную высоту и игнорировать UITableView обработка

#import <UIKit/UIKit.h>                                                
@interface CustomHeaderCell : UIView

@end  

//-----

@import "CustomHeaderCell.h"

@implementation CustomHeaderCell


-(void)setFrame:(CGRect)frame {
    frame.size.height = 43; // !!! constant height
    [super setFrame:frame];
}

@end
0 голосов
/ 17 апреля 2017

У меня такая же проблема UIButtons действия не работают в UITableView's представлении заголовка. Сначала я попытался от setAutoresizingMask до .None, который не работает, затем, прочитав ответы @Davyd и @Alexey, я понял, что не установил представление высоты заголовков, затем я установил его следующим образом: -

self.tablevwMain.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: width_view, height: your_height)

И все UIButton's внутри UITableView's представления заголовка работают правильно.

0 голосов
/ 16 октября 2015

Не забудьте установить высоту нижнего колонтитула в:

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
0 голосов
/ 18 ноября 2008

Следует учитывать, что это не предполагаемый иск headerView и что такая реализация может привести к отклонению из AppStore в результате нарушения HIG. Учитывая, что размеры заголовка предполагаются небольшими, вероятно, лучше рассмотреть реструктуризацию вашего представления. Сказав это, не существует простого способа сделать это, кроме ручного обнаружения сенсорных событий и определения геометрии самостоятельно, а затем выполнить селектор на основе геометрии - короче говоря, прокручивая собственный класс кнопок.

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