2013-05-16 2 views
1

У меня есть индивидуальный UITableViewCell. У них есть следующие проблемы:Проблемы с пользовательским интерфейсом с настраиваемым UITableViewCell

  1. Кнопка удаления слишком далеко справа, перекрывая мой фон. Я бы хотел установить вставку так, чтобы она перемещала ее немного влево, и тогда она выглядела бы великолепно.

Delete button overlapping

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

Highlighted state

Есть ли способ, чтобы исправить эти два вопроса? Благодарю.

Edit: Мой код выглядит следующим образом, чтобы установить фон (только пользовательский метод):

- (UIImage *)cellBackgroundForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSInteger rowCount = [self tableView:[self tableView] numberOfRowsInSection:0]; 
    NSInteger rowIndex = indexPath.row; 
    UIImage *background = nil; 

    if (rowIndex == 0) { 
     background = [UIImage imageNamed:@"cell_top.png"]; 
    } else if (rowIndex == rowCount - 1) { 
     background = [UIImage imageNamed:@"cell_bottom.png"]; 
    } else { 
     background = [UIImage imageNamed:@"cell_middle.png"]; 
    } 

    return background; 
} 

Я тогда этот метод вызывается внутри пустого метода reloadTable, который просто получает каждую клетку и обновления его после было обновление строки (добавление или удаление строки, потому что для таблицы есть 3 разных изображения). Я также называю это после того, как мой получатель результатов получает все мои данные из Core Data и загружает таблицу в первый раз.

Edit 2: Это код для метода reloadTable:

- (void)refreshTable 
{ 
    for (NSInteger j = 0; j < [self.tableView numberOfSections]; ++j) 
    { 
     for (NSInteger i = 0; i < [self.tableView numberOfRowsInSection:j]; ++i) 
     { 
      UIImage *background = [self cellBackgroundForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]; 

      UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background]; 
      cellBackgroundView.image = background; 
      UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]; 
      cell.backgroundView = cellBackgroundView; 
     } 
    } 
} 

Проблемы: Я понятия не имею, как установить поле или ширину Tableview или таблицу ячейку. Мне нужно подклассировать что-то? Как это вообще делается?

+0

Я считаю, что эти проблемы имеют отношение к границам вашего «настроенного« UITableViewCell ». Не могли бы вы опубликовать часть этого кода для нас? –

+0

@TheKraken Я добавил код, надеюсь, что это будет полезно. – swiftcode

+0

После того, как правильное изображение было возвращено, вы устанавливаете это для представления 'UITableViewCell'? –

ответ

1

Проблема заключается в ширине вашей рамы в виде стола, синий цвет выбранной ячейки заполняет всю ячейку, поэтому вам следует уменьшить ширину вида таблицы, поэтому она будет содержать margins таким образом, кнопка delete будет также появляются немного влево. Но все же будут проблемы с первой и последней ячейками, когда вы их выберете, потому что они имеют закругленные углы, но синий выбор не будет иметь закругленные углы, поэтому я предлагаю вам создать изображение .png для выбранного состояния (одна первая ячейка , один для средних клеток и один для нижней клетки)

EDIT

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

yourTableView.frame = CGRectMake(leftMarginSpace, 
           0, 
           self.view.frame.size.width 
            - leftMarginSpace 
            - rightMarginSpace, 
           self.view.frame.size.height); 

Итак, если у вас есть вид таблицы, добавленный в представление контроллера вида, то табличный вид будет располагаться на расстоянии leftMarginSpace слева, в верхней части контроллера вида (позиция 0 y), на расстоянии rightMarginSpace и будет иметь высота контроллера просмотра.

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

yourTableView.frame = CGRectMake(leftMarginSpace, 
            0, 
            parentView.frame.size.width 
             - leftMarginSpace 
             - rightMarginSpace, 
            parentView.frame.size.height); 

Я также заметил, что вы хотите создать сгруппированным стиль таблицы, поэтому вы должны проверить grouped table view.

+0

Не могли бы вы дать мне пример кода? Я не знаю, как установить поля. – swiftcode

+0

Пожалуйста, проверьте мой отредактированный ответ. – danypata

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