2017-01-03 1 views
0

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

Проблема возникает, когда я нажимаю на строку таблицы, которая визуализируется с использованием этого конкретного UITableViewCell.

Это вид по умолчанию строки оказанной с этой UITableViewCell:

default look of a row rendered with UITableViewCell

Это, как представляется, после того, как я нажимаю на него:

how it appears after I tap

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

Это то, что я ожидал увидеть:

expected result

Это структура UITableViewCell, как показано в раскадровке. RouteView является зеленой линией UIView пункт:

UITableViewCell structure as shown into the storyboard

Я также добавить раздел атрибутов раскадровки для объекта UIView:

attributes section of the storyboard for the UIView

У меня есть класс, прикрепленный к UITableViewCell, что ручки макеты объектов через IBOutlets, в то время как нажатие на строку обрабатывается на уровне UITableView.

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

Как я могу решить эту проблему? Спасибо заранее.

+0

Вы настраиваете * routeView * для скрытия в любом месте? – Rikh

+0

@Rikh Nope. Функция, обрабатывающая событие нажатия на UITableViewCell, вызывается, но прямо сейчас, но она пуста, и никакая логика не выполняется. Проблема должна быть где-то на уровне макета, я думаю – LucioB

ответ

2

Мне удалось найти решение, как описано в this answer, но в моем случае в obj-c.

Видимо, что происходит при выборе или подсвечивании UITableViewCell, так это то, что автоматически исключаются все окружающие фоновые цвета просмотров (я думаю, что это [UIColor clearColor]).

Что я делаю, так это цвет моих представлений, прежде чем делать вызов супер метода setSelected или setHighlighted, а затем сразу же установить цвет в качестве фона.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { 

    // Gets route view background color before doing setSelected animation 
    UIColor *routeViewBkgColor = self.routeView.backgroundColor; 
    [super setSelected:selected animated:animated]; 

    // Set route view background color after setSelected animation 
    self.routeView.backgroundColor = routeViewBkgColor; 
} 

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated { 

    // Gets route view background color before doing setSelected animation 
    UIColor *routeViewBkgColor = self.routeView.backgroundColor; 
    [super setHighlighted:highlighted animated:animated]; 

    // Set route view background color after setSelected animation 
    self.routeView.backgroundColor = routeViewBkgColor; 
} 

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

+0

Рад слышать, что вы его решили :) –

1

Пробуйте установить selectionStyle на номер none в cellForRowAtIndexPath.

cell.selectionStyle = .none 
+0

Это работает для вас? –

+0

Спасибо за ваше предложение, но оно не работает должным образом. Установка selectionStyle в none просто удаляет эффект выделения из строки. Вместо этого я хочу сохранить его, но не теряя зеленой линии, как объясняется в вопросе. – LucioB

+0

routeView - это UIView – LucioB

0

Возможно, вам необходимо установить стиль выделения ячейки равным нулю. Вы можете сделать это либо программно, как упомянутый Nirav D, либо через ваш раскадровки (см. Изображение).

enter image description here

+0

Как я уже сказал для @Nirav ответ на выбор selectionStyle никому просто удаляет эффект выбора из строки. Вместо этого я хочу сохранить его, но не теряя зеленой линии, как объясняется в вопросе. – LucioB

0

Оба текущих ответов являются правильными, но только в том случае, если вы работаете в Objective-C, а не быстрым.

Вы должны использовать cell.selectionStyle = UITableViewCellSelectionStyleNone;

Или, если вы хотите иметь эфект на «клик», чем вы должны использовать

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

} 

Надеются, что это помогает!:-)