2014-11-23 2 views
1

Я хотел бы добавить новую ячейку, когда пользователь нажимает или нажимает ниже последней ячейки в UITableView, но только тогда, когда высота представления больше, чем высота всех ячеек.Tap или LongPress под ячейками

Я не хочу, сепараторов и я использую:

myTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

Как пустой взгляд вместо.

Я стараюсь изменить и добавить UITapGestureRecognizer в myTableView.tableFooterView. Он также остался в конце, когда для заполнения экрана достаточно ячеек. Я хочу, чтобы он работал на частично пустом экране.

Не думаю, что сообщение UITableViewDelegate отправлено в этом случае.

EDIT

После @LeoNatan ответа, я стараюсь с этим (в viewDidLoad):

UIView *backView = [[UIView alloc] initWithFrame:self.myTableView.frame]; 
singleTapBack = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBack:)]; 
//singleTapBack.delegate = self; // the problem... 
singleTapBack.numberOfTapsRequired = 1; 
singleTapBack.numberOfTouchesRequired = 1; 
[backView addGestureRecognizer:singleTapBack]; 
self.myTableView.backgroundView = backView; 

Когда я касаюсь фона:

-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView indexPathForRowAtPoint:]: unrecognized selector sent to instance 0x7fff0bc16a20' 

0x7fff0bc16a20 является UIView *backView
и @selector(handleTapBack:) не называется

+1

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

+0

@JayMorgan: Я знаю. Я предлагаю простой способ добавления ячеек. Но я наблюдал во время тестирования новых пользователей, они коснулись ниже списка, в пустой части, с идеей добавить что-то. И я хочу дать им возможность. – Croises

+0

@Croises: Что было написано в вашем методе 'handleTapBack'? Проблема заключается в этом методе. –

ответ

2

Вы можете добавить новую, пустую, «Создать новую» ячейку в нижней части таблицы. Сделайте что-нибудь подобное.

@property (strong, nonatomic) UITableViewCell *createNewCell; 

- (UITableViewCell *)createNewCell { 
    if (!_createNewCell) { 
     // can be your own nib too 
     _createNewCell = [self.tableView dequeueReusableCellWithIdentifier:@"CreateNewCell" 
     _createNewCell.textLabel.text = @"+ New entry"; 
    } 
    return _createNewCell; 
} 

- (BOOL)isCreateNewCell:(NSIndexPath *)indexPath { 
    return (indexPath.row == modelArray.count + 1); 
} 

- (UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([self isCreateNewCell:indexPath]) { 
     return self.createNewCell 
    } 

    // rest of cell configuration 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return modelArray.count + 1; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if ([self isCreateNewCell:indexPath]) { 
     // do insert stuff or go into edit mode 
    } 
    // do other selection stuff 
} 

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

Если это не то, что вы хотите, вы можете сделать прозрачный вид фона.

myTableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.frame; 
myTableView.backgroundView.alpha = 0; 

и добавить UITapGestureRecognizer:

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@sel(newCellTapped)]; 
[myTableView.backgroundView addGestureRecognizer:tgr]; 
+0

Спасибо, но я не хочу дно ячейки списка. У меня уже есть способ добавления ячеек. Просто в начале список тоже пуст. И я также хотел бы добавить ячейку, когда экран коснется ниже существующих ячеек. Но не после того, как экран заполнен клетками. – Croises

+0

Что означает «когда вид больше, чем все ячейки». имею в виду? – Jadar

+0

Извините за мой английский ... Когда экран достаточно большой, чтобы отобразить 10 ячеек. И что на экране всего 1 или 2. – Croises

1

Если вы хотите, чтобы вы могли удалять пустые области в виде таблицы, добавьте backgroundView в вид таблицы. Для этого фонового представления добавьте свой распознаватель жестов (не забудьте включить взаимодействие с пользователем в фоновом режиме). Когда распознаватель жестов обнаруживает нажатие, добавьте ячейку с соответствующей анимацией. Наконец, отметьте tableView.visibleCells.count, чтобы определить, содержит ли в вашем представлении таблицы достаточное количество ячеек для заполнения экрана. Если это так, отключите распознаватель жестов.

+0

Я думал об этом. Моя проблема в том, что у меня есть автоматическая калибровка ячеек. И, следовательно, клетки разных размеров. Но не обязательно отключать распознаватель жестов после того, как фон замаскирован клетками. Или существует риск вмешательства? – Croises

+0

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

+0

Да, вы могли бы просто добавить распознаватель жестов в фоновый режим. Вид таблицы обычно перехватывает все нажатия на ячейки, поэтому фоновый просмотр никогда не получит его. Стоит попробовать! – Jadar

0

Ну в этом случае ниже, что я сделал бы.

  1. Всегда загружать TableView с your_size + 1 (+1 для добавления пустой ячейки)

  2. Когда TableView загружается, создать последнюю ячейку, которая будет иметь кнопку одинакового размера ячейки.

  3. Вызов IBAction на эту кнопку печати

  4. В IBAction, добавить ячейку и перезагрузить таблицу

дайте мне знать, если у вас есть какие-либо вопросы.


Если вас беспокоит разделительная линия, перейдите по ссылке ниже.

Hide remove separator line if UITableViewCells are empty

+0

Спасибо. это была и моя первая идея. Но трудно поддерживать последнюю ячейку, чтобы точно заполнить экран (с ячейками, которые часто меняют число и размер). – Croises

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