UIButton в заголовке UITableView игнорирует большинство касаний
У меня есть кнопка, которую я добавляю в качестве подзона таблицы tableHeaderView. Кнопка кажется прекрасной, и нажатие и удерживание на ней работает с перерывами - по большей части, однако, она не отвечает. Я попытался добавить его как подзаголовок самой таблицы; эффект примерно такой же. Я думал, что проблема может быть связана с перехватом сенсорного экрана прокрутки, но отключение прокрутки на столе также не влияет.
Я что-то делаю неправильно? Кто-нибудь еще столкнулся с этим?
edit - чтобы уточнить, я говорю о главном заголовке таблицы, а не заголовке раздела, в таблице сгруппированных стилей; думаю, в основном моделируется после экрана "Контакт".
Ответы
Ответ 1
У меня была та же проблема. В моем случае у меня был экземпляр контейнера, созданный в IB (который использовался как заголовок таблицы в коде), а UIImageView занимал весь кадр этого контейнера. Кнопка с неправильным расположением находилась в представлении изображения.
Оказалось, что мне нужно, чтобы шкафы с размерами в IB устанавливались следующим образом...
Вид контейнера: внешние анкеры все включены, изменение размера интерьера - все выключено
Sub Image View: все стойки (внутри и снаружи)
У меня было несколько разных табличных представлений, все с использованием заголовков. Некоторые ответят правильно на сенсорные события, некоторые из них будут шелушатся. Это решило мою проблему
Ответ 2
У меня была аналогичная проблема - текстовое поле и кнопка внутри представления, заданного как представление заголовка таблицы, которое не реагирует на события касания. 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).
Ответ 3
Я полностью не согласен с Wisequark - нет абсолютно ничего плохого в том, чтобы поместить кнопку в tableHeaderView, и в том числе вы не рискуете отклонить свое приложение из магазина приложений. TableHeaderView предназначен для произвольного представления, содержащего любые элементы, которые вы выбираете.
Что касается вашей проблемы, возможно, у вас есть представление, скрывающее вашу кнопку, или это может быть просто ошибка, о которой следует сообщить Apple.
Ответ 4
Моя ситуация была похожа на Danny Hall (представление заголовка таблицы было UIImageView, а также был UIButton, который был подпунктом UIImageView). В моем случае проблема, похоже, была вызвана тем, что кнопка является подчиненным представлением изображения. То, что работало для меня, создавало представление "содержащий" UIView, так что и представление изображения, и кнопка являлись подзонами "содержащего" представления. странно.
Ответ 5
Как ни странно, но вид заголовка таблицы, по-видимому, изменен неправильно.
Я использую автомасштабирование, поэтому авторезистирующая маска не была для меня вариантом. После проверки моей иерархии просмотров:
![введите описание изображения здесь]()
и заметил, что мой пользовательский заголовок имеет неправильную высоту, поэтому только половина из них была сбрасываема (см. выделенное представление):
![введите описание изображения здесь]()
Ручное обновление его высоты устраняет проблему:
- (void)viewDidLayoutSubviews {
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 116.0;
self.tableView.tableHeaderView.frame = frame;
}
![введите описание изображения здесь]()
Кроме того, высота заголовка таблицы может стать недействительной после изменения ориентации. Эта проблема также может быть исправлена с предоставленным решением.
Ответ 6
tableHeaderView имеет 0 height, в то время как обработка выполняется в 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
Ответ 7
Не забудьте установить высоту нижнего колонтитула в:
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
Ответ 8
У меня та же проблема 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
работает правильно.
Ответ 9
Вы должны учитывать, что это не предполагаемый иск headerView и что такая реализация может привести к отказу от AppStore в результате нарушения HIG. Учитывая, что размеры заголовка должны быть небольшими, вероятно, лучше рассмотреть реструктуризацию вашего представления. Сказав это, нет простого способа сделать это за исключением того, что вручную обнаруживают события касания и сами определяют геометрию, а затем выполняют селектор, основанный на геометрии, короче говоря, наматывая собственный класс кнопок.