Я опоздал на вечеринку, но ни один из этих решений не работал для меня. Я очень хотел попробовать 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);
}
}
Лучший способ установить выбор - установить 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
на нужный вам цвет.
Этот фон автоматически применяется, когда строка выделена.
Переопределение 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
}
можно принять решение анимировать это представление, когда оно является невыбранным и удовлетворит требования.
Установка selectedBackgroundView
кажется неэффективной, если для cell.selectionStyle
установлено значение UITableViewCellSelectionStyleNone
. Когда я не устанавливаю стиль, используется серый цвет по умолчанию.
Использование первого предложения, которое вставляет пользовательский UIView
в ячейку, действительно манипулирует ячейкой, но не отображается при прикосновении к ячейке, только после завершения выбранного действия, что слишком поздно, потому что Я стремлюсь к новому взгляду. Как сделать так, чтобы выбранное представление в ячейке отображалось до начала выбранной операции?