2012-05-29 2 views
1

Я пытаюсь иметь UITableView, который находится в сгруппированном стиле, который занимает около 70% от ширины iPad, поскольку 100% просто не выглядит хорошо. Это означает, что есть около 150 пикселей по обе стороны.Увеличьте область попадания для UITableView

Это прекрасно, но я хочу иметь всю ширину экрана, доступную для прокрутки.

Я пробовал все виды отвода вокруг с точкой зрения содержания и вставками, и т.д., такие как:

self.theTable.contentInset = UIEdgeInsetsMake(0, 150, 0, 150); 
self.theTable.contentSize = CGSizeMake(self.theTable.contentSize.width + 300, self.theTable.contentSize.height); 
self.theTable.contentOffset = CGPointMake(-150, 0); 

Но я не могу заставить его работать, как я хочу.

Мне нужно иметь возможность использовать фон с обеих сторон (150 пикселей или около того) и иметь возможность прокручивать вид таблицы, перетаскивая туда.

По существу, я полагаю, это соответствует либо увеличению размера прокрутки на 150 пикселей с обеих сторон, либо вставка таблицы 150 пикселей по обе стороны.

Любые идеи?

ответ

1

Вы можете переопределить hitTest:withEvent: метод просмотра и отображения таблицы tableView для желаемых точек.

В качестве альтернативы вы можете переопределить hitTest:withEvent: в tableView и проверить условия там.

Пример использования метода checkover hitTest для контейнеров. Все события будут перенаправлены в tableView.

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    if (![self pointInside:point withEvent:event]) { 
     return nil; 
    } 
    UITableView *tableView = nil; 
    for (UIView *v in self.subviews) { 
     if ([v isKindOfClass:[UITableView class]]) { 
      tableView = v; 
      break; 
     } 
    } 

    if (!tableView) { 
     return self; 
    } 

    if (CGRectContainsPoint(tableView.frame, point)) { 
     return [tableView hitTest:[self convertPoint:point toView:tableView] withEvent:event]; 
    } else { 
     return tableView; 
    } 
} 
+0

Блестящий. Чинги @ Евгени Шураков. Для тех, кто пытается реализовать это, вам нужно либо добавить это в супервизор (т.е. UIView, а не UIViewController). Для меня это означало создание нового объекта подкласса UIView, вставить указанный выше код и затем выбрать этот класс в построителе интерфейса. Работает. – Tim

+0

В качестве продолжения (не уверен, что это должен быть новый вопрос?), У меня есть подклассовый UIButton, который отлично работает в UITableView, но с переопределением он не работает (не удивительно), так как я полагаю, m просто передавая удар от кнопки к таблице, чтобы она прокручивалась. Я пробовал тестирование для pointInside: withEvent :, но он, похоже, не регистрируется. Иерархия классов - UITableView-> TFButtonCell-> UITableViewCellContentView-> TFButton. – Tim

+1

Правильно, я редактировал код. Идея состоит в том, что вы должны фактически передавать событие рядом с табличным представлением, когда вы нажимаете именно на него, чтобы он мог определить, что делать с действием. –

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