2015-01-08 7 views
0

У меня настроены ячейки tableVew, каждая из которых содержит большой палец и метку. Я хотел бы изменить палец большого пальца - цвет фона, когда пользователь его выбрал .. пользователь может выбрать до 4 ячеек, тогда он должен отменить выбор одного из них, чтобы выбрать новый.Изменение цвета фона большого пальца при выборе ячейки

здесь я сделал клетку

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->  UITableViewCell { 
    var cell = myTable.dequeueReusableCellWithIdentifier("intrest") as UITableViewCell 
    cell.textLabel?.text = InterstArr[indexPath.row] 
    var img = UIImageView(frame: CGRect(x: 10, y: 3, width: 40 , height: 40)) 
    img.image = UIImage(named: "transparent.png") 
    cell.indentationLevel = 1 
    cell.indentationWidth = 45 
    cell.addSubview(img) 
    img.backgroundColor=UIColor.whiteColor() 
    var bgColorView = UIView() 
    bgColorView.backgroundColor = UIColor.clearColor() 
    cell.selectedBackgroundView = bgColorView 
    return cell 
} 

я должен написать код в didSelectRowAtIndexPath или мне нужно сделать это в отдельной функции?

+0

Скажите мне, если я идиот, но не можете ли вы просто получить ячейку от cellForRow, а затем оттуда просто изменить цвет фона из того, что вы хотите внутри ячейки? –

+0

@ Zil вещь, я хочу изменить цвет большого пальца только после того, как пользователь нажимает на ячейку, также пользователь может выбрать до 4 .. не только один –

+0

Счетчик не должен быть проблемой, я могу извини, когда я быть на работе, а не на моем телефоне. И я запутался, когда написал свой комментарий, я имел в виду didSelectRowAtIndex, а не cellForRow. Îll написал удовлетворительный ответ за 15 минут –

ответ

0

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

В didSelectRowAtIndexPath вам также необходимо проверить, что ячейка нажата, еще не находится в массиве, и вам также нужно проверить, сколько объектов существует в массиве (начиная с предела 4).

Если я не понял вопрос, оставьте свой комментарий!

+0

Я думаю, что есть более простой способ сделать это. Я могу проверить задний цвет само изображение, будь то красное или нет, тогда записывайте его в массив. Но проблема в том, как изменить только фоновый рисунок - фон большого пальца - когда пользователь нажал на ячейку? @Viktor Nilsson –

+0

Я не уверен, что правильно понимаю, но я думаю, что вы должны подклассифицировать UITableViewCell как минимум. Возможно, вы можете сделать макет в Interface Builder и создать Outlets. Прямо сейчас вы можете повторно использовать UITableViewCells и добавлять к нему все новые и новые представления (cell.addSubview (img)), даже если он уже добавлен (если Im не ошибается). Как я уже сказал, я не уверен, что я точно понимаю проблему с фоном большого пальца, но я думаю, что подклассификация UITableViewCell, создание точек и установка фона в cellForRowAtIndexPath могут решить некоторые проблемы, поскольку вы можете легко получить доступ к представлениям для ячеек. –

+0

И поскольку вы повторно используете ячейки, вы не должны зависеть от значений, установленных для элементов для ячейки, поскольку ячейка в indexPath A может быть той же ячейкой, которая повторно используется для ячейки в indexPath B. –

1

Итак, вот что вы хотите:

  1. Нет изюминки, но пользовательские изменения (здесь, цвет фона из изображения)
  2. Многоскоростных с лимитом 4. Если больше, нет выберите разрешенный, пользователь должен отменить выбор вручную. (я не согласен с этим поведением, я бы предпочел, чтобы самая ранняя ячейка автоматически отменила выбор).

Предупреждение: Я не знаю, быстр все же, я пишу это в объективном C, но я уверен, что вы можете работать ваш путь вокруг этого.

  1. легко: cell.selectionStyle = UITableViewCellSelectionStyleNone; делает трюк. Вы все еще можете играть с ячейкой, но визуально, ничего не происходит. (все коды все еще вычеркнуты)

  2. Вам нужен массив или словарь (я бы пошел на словарь, потому что он быстрее по производительности), содержащий индексы уже выбранных ячеек. Попросите помощи, если вам это нужно.

В вашей didSelectRowAtIndexPath, каждый раз, когда вы выбираете, первый: - Проверьте, если ячейка уже в словаре выбора, если он есть, снимите его и удалить его из словаря. - Если нет, проверьте количество словаря, если оно> = 4, ничего не делайте - Если нет, добавьте индекс в словарь, измените цвет и выполните любой другой код, который вам нужен при выборе.

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

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

Если я не забыл что-то, это почти что. Это довольно легкий код &.

0

Да, вы можете только изменить backgroundColor миниатюры в файле didSelectRowAtIndexPath и сохранить стиль выделения как None для ячейки.

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