iPhone UITableView - Удалите Кнопку

Как я уже упоминал в своих комментариях, я считаю, что читать построчно проще:

record = 0
results = []

for line in CLI_Output.split("\n"):
    # skip empty lines
    if line == "" and record < 2:
        continue

    # if Router Link is in header
    if line.find('Router Link') > -1:
        record = 1
        continue

    # headers
    if record == 1:
        record = 2
        continue

    # If we are here, we are getting the data lines
    if record == 2 and line != "":
        results.append(line)
    elif line == "":
        record = 0  # use break here if you want to stop after the first chunk

print(results)

Результаты:

['10.189.7.250    10.189.7.250    1102       0x80012fa1 0x6b32   2',
 '10.200.254.252  10.200.254.252  97          0x80000003 0x00501E 3',
 '10.189.127.3    10.189.127.3    1707       0x80001d5e 0xa509   1',
 '10.189.254.242  10.189.254.242  10         0x80001ce0 0x8ec2   1',
 '10.189.7.250    10.189.7.250    1102       0x80012fa1 0x6b32   2',
 '10.189.254.243  10.189.254.243  1552       0x80001ce8 0x164e   1']

демонстрация кодовой панели


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

^\ +(.+) Router Link States\s*(?:\([^)]+\))?\s+Link ID.+\s+((?:[^\r\n]+[\r\n]?)+)

[ 119] regex101 demo

27
задан Brian Tompsett - 汤莱恩 6 July 2015 в 11:24
поделиться

5 ответов

Код Ивата у меня не работает. Но это работает.

- (void)willTransitionToState:(UITableViewCellStateMask)state {

    [super willTransitionToState:state];

    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {

        for (UIView *subview in self.subviews) {

            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {             

                subview.hidden = YES;
                subview.alpha = 0.0;
            }
        }
    }
}

- (void)didTransitionToState:(UITableViewCellStateMask)state {

    [super didTransitionToState:state];

    if (state == UITableViewCellStateShowingDeleteConfirmationMask || state == UITableViewCellStateDefaultMask) {
        for (UIView *subview in self.subviews) {

            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) {

                UIView *deleteButtonView = (UIView *)[subview.subviews objectAtIndex:0];
                CGRect f = deleteButtonView.frame;
                f.origin.x -= 20;
                deleteButtonView.frame = f;

                subview.hidden = NO;

                [UIView beginAnimations:@"anim" context:nil];
                subview.alpha = 1.0;
                [UIView commitAnimations];
            }
        }
    }
}
24
ответ дан 28 November 2019 в 04:15
поделиться

Для меня лучший способ решить эту проблему - это переопределить -(void)layoutSubviews в MyCell:UITableViewCell

. Здесь вы можете увидеть не только пользовательскую позицию кнопки «Удалить», но также изменить положение элементов управления «Редактировать» и «Изменить порядок» для . Режим редактирования

- (void)layoutSubviews
{
    [super layoutSubviews];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.0f];

    for (UIView *subview in self.subviews) {


        if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"]) { 
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 200;
            subview.frame = newFrame;
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellEditControl"]) {             
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 100;
            subview.frame = newFrame;
        }
        else if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellReorderControl"]) {             
            CGRect newFrame = subview.frame;
            newFrame.origin.x = 200;
            subview.frame = newFrame;
        }
    }
    [UIView commitAnimations];
}
58
ответ дан Paras Joshi 28 November 2019 в 04:15
поделиться

Мне не удалось изменить фактический вид кнопки удаления, но вы можете изменить текст. Возможно, вы можете использовать это, чтобы получить эффект, который вы ищете?

Проверьте следующий член протокола UITableViewDelegate:

- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath

Кроме того, вы можете определить, когда кнопка удаления отображается путем подкласса UITableViewCell и переопределения следующего:

- (void)willTransitionToState:(UITableViewCellStateMask)state
- (void)didTransitionToState:(UITableViewCellStateMask)state

Для любого из них маска состояния будет UITableViewCellStateShowingDeleteConfirmationMask, когда отображается кнопка удаления.

Надеюсь, эти подсказки укажут вам правильное направление.

2
ответ дан Ethan 28 November 2019 в 04:15
поделиться

Я не знаю, как "переместить кнопку удаления на 10 пикселей влево". Однако вы можете анимировать пользовательское содержимое ячейки таблицы вокруг статического положения неподвижной кнопки удаления, прослушивая сообщение willTransitionToState: из подкласса UITableViewCell, см. здесь .

Чтобы процитировать документы:

Подклассы UITableViewCell могут реализовать этот метод для анимации дополнительных изменений в ячейке, когда она меняет состояние. UITableViewCell вызывает этот метод всякий раз, когда ячейка переходит между состояниями, например, из нормального состояния (по умолчанию) в режим редактирования. Пользовательская ячейка может устанавливать и позиционировать любые новые виды, которые появляются с новым состоянием. Затем ячейка получает сообщение layoutSubviews (UIView), в котором она может расположить эти новые представления в их окончательных местоположениях для нового состояния. Подклассы всегда должны вызывать super при переопределении этого метода.

То, что вы ищете, это значение UITableViewCellStateShowingDeleteConfirmationMask. Это один из тех случаев, когда создание подкласса UITableViewCell может быть лучше, поэтому из контроллера вы просто создаете экземпляр своей пользовательской ячейки. Тогда ячейка может просто настроить себя, как animateLeft и animateRight, и обработать внутреннюю работу по настройке своих собственных подпредставлений.

1
ответ дан slf 28 November 2019 в 04:15
поделиться

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

// subclass UITableViewCell

- (void)willTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];

    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableCellStateShowingDeleteConfirmationMask)
    {
        for (UIView *subview in self.subviews)
        {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
            {
                subview.hidden = YES;
                subview.alpha = 0;
            }
        }
    }
}

- (void)didTransitionToState:(UITableViewCellStateMask)state
{
    [super willTransitionToState:state];

    if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableCellStateShowingDeleteConfirmationMask)
    {
        for (UIView *subview in self.subviews)
        {
            if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
            {
                subview.frame = CGRectMake(subview.frame.origin.x - 10, subview.frame.origin.y, subview.frame.size.width, subview.frame.size.height);
                subview.hidden = NO;

                [UIView beginAnimations:@"anim" context:nil];
                subview.alpha = 1;
                [UIView commitAnimations];
            }
        }
    }
}
0
ответ дан 28 November 2019 в 04:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: