Пользовательское редактированиеAccessoryView ведет себя непредсказуемо - PullRequest
3 голосов
/ 05 июля 2011

Хорошо, сначала - как я хочу, чтобы мои ячейки выглядели в моем UItableView в режиме редактирования (с некоторыми более приятными кнопками):

enter image description here

Однако - вот так это выглядитпрямо сейчас:

enter image description here

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

Теперь мой код выглядит следующим образом (который выглядит как обычный способ сделать это, например, по этому вопросу: Как добавить Custom EditingAccessoryView для UITableView? )

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        cell.editingAccessoryView = AccessoryView;
        AccessoryView.backgroundColor = [UIColor clearColor];
    }

Я прочитал, что вы должны иметь возможность вызывать свой пользовательский editAccessoryView, проводя пальцем, даже если - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath возвращает "НЕТ".Однако этого я не смог достичь.

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

Любая помощь будет высоко ценится.

Ответы [ 4 ]

1 голос
/ 06 июля 2011

Я предлагаю вам ячейку таблицы подкласса и переопределить следующий метод

- (void)layoutSubviews
{
    if([self isEditing])
    {    
        // your custom stuff
       [self.contentView addSubview:myButton];
    }
}
0 голосов
/ 29 августа 2012

Для удаления красных кружков вы можете вернуть UITableViewCellEditingStyleNone в

- (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath;

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

Моя проблема в том, что мой пользовательский EditingAccessoryView отображается только в ячейке, которую я впервые создал

Попробуйте создать новый экземплярAccessoryView для каждой ячейки вместо использования одной и той же.

0 голосов
/ 06 июля 2011

Вам нужно сделать новый аксессуарПросмотр для каждой ячейки.

0 голосов
/ 05 июля 2011

Вместо того, чтобы устанавливать все это в cellForRowAtIndexPath ...., сделайте это.

В cellForRowAtIndexPath

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

И установите вспомогательный вид в

 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
 {
     if (editingStyle == UITableViewCellEditingStyleDelete) {
         // Delete the row from the data source
         NSLog(@"Am I Editing");

         UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

         selectedCell.editingAccessoryView = AccessoryView;
         AccessoryView.backgroundColor = [UIColor clearColor]
     }   
     else if (editingStyle == UITableViewCellEditingStyleInsert) {
         // Create a new instance of the appropriate class,
         //   insert it into the array, and add a new row to the table view
     }   
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...