Как я устанавливаю свойство UITableViewCellSelectionStyle на некоторый пользовательский цвет?

Я опоздал на вечеринку, но ни один из этих решений не работал для меня. Я очень хотел попробовать System.Linq.Dynamic, но я не мог найти это на Nuget, возможно, обесценился? В любом случае ...

Вот решения, которые я придумал. Мне нужно было динамически использовать смесь OrderBy, OrderByDescending и OrderBy> ThenBy.

Я просто создал метод расширения для моего объекта списка, немного взломанный, я знаю ... Я бы не рекомендовал это, если он было что-то, что я делал много, но это хорошо для одного.

List<Employee> Employees = GetAllEmployees();

foreach(Employee oEmployee in Employees.ApplyDynamicSort(eEmployeeSort))
{
    //do stuff
}

public static IOrderedEnumerable<Employee> ApplyDynamicSort(this List<Employee> lEmployees, Enums.EmployeeSort eEmployeeSort)
{
    switch (eEmployeeSort)
    {
        case Enums.EmployeeSort.Name_ASC:
            return lEmployees.OrderBy(x => x.Name);
        case Enums.EmployeeSort.Name_DESC:
            return lEmployees.OrderByDescending(x => x.Name);
        case Enums.EmployeeSort.Department_ASC_Salary_DESC:
            return lEmployees.OrderBy(x => x.Department).ThenByDescending(y => y.Salary);
        default:
            return lEmployees.OrderBy(x => x.Name);
    }
}
35
задан Ryan Townshend 28 January 2009 в 16:48
поделиться

3 ответа

Лучший способ установить выбор - установить selectedBackgroundView на ячейку при создании ит.

т.е.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectedCellBackground.png"]] autorelease];
    }

    // configure the cell
}

Используемое изображение должно иметь хороший градиент (как выбор по умолчанию). Если вы просто хотите получить плоский цвет, вы можете использовать UIView вместо UIImageView и установить backgroundColor на нужный вам цвет.

Этот фон автоматически применяется, когда строка выделена.

64
ответ дан 27 November 2019 в 06:30
поделиться

Переопределение didSelectRowAtIndexPath: и потяните UIView цвета Вашего выбора и вставьте его позади UILabel в ячейке. Я сделал бы это что-то вроде этого:

UIView* selectedView; //inside your header

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

  UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
  selectedView = [[UIView alloc] initWithFrame:[cell frame]];
  selectedView.backgroundColor = [UIColor greenColor]; //whatever

  [cell insertSubview:selectedView atIndex:0]; //tweak this as necessary
  [selectedView release]; //clean up

}

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

2
ответ дан ingh.am 10 October 2019 в 11:29
поделиться

Установка selectedBackgroundView кажется неэффективной, если для cell.selectionStyle установлено значение UITableViewCellSelectionStyleNone . Когда я не устанавливаю стиль, используется серый цвет по умолчанию.

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

24
ответ дан 27 November 2019 в 06:30
поделиться
Другие вопросы по тегам:

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