Scope Bar для UITableView, например, App Store?

Кто-нибудь знает, как добавить панель видимости в UITableView? Приложение App Store делает это иногда, как на рисунке ниже.

Я хотел бы использовать эту панель видимости для добавления параметров сортировки для элементов в UITableView. Это было бы более удобно, чем наличие панели инструментов с UISegmentControl.

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

image showing what I want

Ответ 1

Элемент UISegmentedControl с стилем UISegmentedControlStyleBar. Вы можете установить свойство tintColor, чтобы получить желаемый цвет. Просто поместите представление над табличным представлением, и вы можете получить что-то похожее на этот снимок экрана.

Ответ 2

На самом деле, в отличие от других, это свойство UISegmentedControl .segmentedControlStyle имеет недокументированное значение 7.

 theSegCtrl.segmentedControlStyle = 7;

Но ответ @Macatomy более безопасен для AppStore (хотя Apple все равно не может это обнаружить).

Ответ 3

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

Внутри вашего ViewController, который вы используете в этом TableViewController, вы должны вставить следующий код:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

NSArray *segmentTextContent = [NSArray arrayWithObjects: @"one",@"two",@"three", nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTextContent];
segmentedControl.frame = CGRectMake(2, 5, 316, 35);

[self.segmentedControl addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];
self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; //changes the default style
self.segmentedControl.tintColor = [UIColor darkGrayColor]; //changes the default color
self.segmentedControl.enabled = true;
self.segmentedControl.selectedSegmentIndex = 0;

return self.segmentedControl;

}

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

Надеюсь, что это поможет.

Ответ 4

UISegmentedControl

Вы создаете его, настраиваете его сегменты и устанавливаете его делегат. Затем делегат принимает какое-то действие каждый раз, когда выбранный сегмент изменяется.