UISegmentedControl в приложении Почта - PullRequest
6 голосов
/ 22 сентября 2010

Как получить UISegmentedControl, похожий на тот, что в почтовом приложении, чтобы он был того же цвета, что и кнопки UIToolbar (как если бы оба сегмента были в выбранном состоянии).

Я хочу использовать сегментированный элемент управления для той же цели, что и Mail.

(на iPad, поэтому серый, а не синий цвет)

Ответы [ 5 ]

6 голосов
/ 27 сентября 2010

Это код из Apple. Примеры кодов ... NavBar и оба изображения, использованные в коде ... вы сможете получить точно такой же вид, как в почтовом приложении.

alt text alt text

// "Segmented" control to the right
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
                                            [NSArray arrayWithObjects:
                                                [UIImage imageNamed:@"up.png"],
                                                [UIImage imageNamed:@"down.png"],
                                             nil]];
[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
segmentedControl.frame = CGRectMake(0, 0, 90, 30);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;

defaultTintColor = [segmentedControl.tintColor retain];    // keep track of this for later

UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
[segmentedControl release];

self.navigationItem.rightBarButtonItem = segmentBarItem;
[segmentBarItem release];
3 голосов
/ 27 сентября 2010

Вы ищете tintColor собственность!

Когда вы используете UISegmentedControl, вы можете изменить его оттенок на любой, какой только сможете придумать.Итак, если вы добавили UISegmentedControl в Интерфейсном Разработчике, то вы бы стилизовали его в своем методе - (void)viewWillAppear:(BOOL)animated как таковом (при условии, что он подключен к @synthesized ivar:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Set the tintColor to match the navigation bar
    self.mySegmentedControl.tintColor = [UIColor colorWithRed:.94 green:.94 blue:.94 alpha:1];

    ... do whatever else in your viewWillAppear ...
}

Теперь, очевидно, вы захотитечтобы поиграть с красными, зелеными, синими и альфа-вершинами, которые я вставил в приведенный выше пример кода, но вы можете буквально подкрасить UISegmentedController любым цветом, который захотите (или сделать его настолько прозрачным, насколько вы хотите), так что это простовопрос поиска значений RGBA, которые выглядят идеально для вас.

Помните, что согласно документам Apple, это the default value of this property is nil (no color). UISegmentedControl uses this property only if the style of the segmented control is UISegmentedControlStyleBar.

Удачи!

1 голос
/ 26 ноября 2010

Стиль, который я ищу, недокументирован: это стиль 4. Похоже, он здесь вверх / вниз: http://media.mobilemeandering.com/wp-content/uploads/2010/04/ipad-mail-message-2.png (не мое изображение между прочим)

По сути, все сегменты выглядят выделенными, он предназначен для кратковременных нажатий и фактически состоит из нескольких кнопок на панели инструментов, сдвинутых вверх. Поэтому его нельзя установить в IB, но его необходимо установить в коде или вручную в файле nib / xib, открыв его как текстовый файл.

1 голос
/ 22 сентября 2010

Я не знаю точно, что вы имеете в виду ... но я считаю, что "UISegmentedControlStyleBar", как и segmentedControlStyle, может быть.

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar

Вы также можете установить это свойство в IB! (Это свойство называется "стиль")

0 голосов
/ 01 октября 2010

Я не уверен, что точно понимаю, что вы пытаетесь сделать, но я попробую.

Решение неочевидно, вам нужно использовать UISearchDisplayController , чтобы получить совпадающие UISearchBar и UISegmentedControl.

См. Пример кода TableSearch .

...