UITableView слайд не редактируемые строки с редактируемыми строками Xcode iPhone - PullRequest
2 голосов
/ 31 января 2012

Я занимаюсь разработкой приложения для iPhone, и у меня есть одна проблема.У меня есть UITableView с несколькими редактируемыми строками (

 -(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{ )

и одной нередактируемой строкой. Если я щелкну по редактированию, редактируемые строки сдвинутся немного вправо, и слева от них будет красная круглая кнопкаэто, но нередактируемый ряд вообще не скользит. Есть ли способ также сдвинуть его вправо, но без красной кнопки слева? Сейчас это выглядит не очень хорошо. Я надеюсь, что кто-то может помочьмне с этим :) 1004 *

Ответы [ 2 ]

1 голос
/ 31 января 2012

Я не уверен, если это хорошая идея, чтобы изменить поведение по умолчанию tableView. Но если вы действительно хотите, вы можете, например, использовать отступ.

// Might be target of button
- (void) setEditingMode
{
    tableView.editing = YES;
    [tableView reloadData];
}

// Might be target of button
- (void) resetEditingMode
{
    tableView.editing = NO;
    [tableView reloadData];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = ...;
    ....
    Boolean cellIsEditable = ...;
    if( tableView.editing && !cellIsEditable )
    {
        cell.indentationWidth = ...; // (please experiment to find the exact value)
        cell.indentationLevel = 1;
    }
    else
    {
        cell.indentationLevel = 0;
    } 
}
0 голосов
/ 13 марта 2013

Создайте подкласс UITableViewCell и сдвиньте не редактируемую строку самостоятельно.

@interface MyHistoryTableViewCell : UITableViewCell
@end

@implementation MyHistoryTableViewCell : UITableViewCell

#define CELL_SLIDE_WIDTH    32  // found empirically
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];
    if ( self.editingStyle == UITableViewCellEditingStyleNone ) { // not editable
        CGRect frame = self.frame;
        UITableView *tableView = ((UITableView *)(self.superview));
        if ( tableView.editing ) { // going to editing mode
            frame.origin.x = CELL_SLIDE_WIDTH;
            frame.size.width = tableView.frame.size.width - CELL_SLIDE_WIDTH;
        } else {  // ending editing
            frame.origin.x = 0;
            frame.size.width = tableView.frame.size.width;
        }
        [UIView animateWithDuration:0.3 animations:^{ // match the tableView slide duration
            self.frame = frame;
        }];
    }
}
@end

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

mySubview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; // anchors to the right margin

Кроме того, вы должны проявлять творческий подход при настройке frameview.origin.x подпредставления. Я экспериментировал со многими значениями, пока не нашел что-то работающее (значение не имело для меня смысла).

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