Добавьте CustomBadge в UISegmentedControl в панели навигации.

В navigationBar есть UISegmentedControl, который создан в Storyboard и к которому подключен Outlet. Я попытался добавить собственный значок в UISegmentedControl, но не смог. Значок не появляется.

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

MyTableViewController.h

...

@interface MyTableViewController : UITableViewController{
} 

@property (strong,nonatomic) IBOutlet UISegmentedControl  *segmentedControl;

...

MyTableViewController.m

@synthesize segmentedControl;

...

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    CustomBadge *customBadge = [CustomBadge customBadgeWithString:@"1" withStringColor:[UIColor whiteColor] withInsetColor:[UIColor orangeColor] withBadgeFrame:YES withBadgeFrameColor:[UIColor whiteColor] withScale:0.8 withShining:YES];

NSLog(@"self.segmentedControl :%@",self.segmentedControl);
NSLog(@"self.segmentedControl w: %f, h :%f",self.segmentedControle.frame.size.width, self.segmentedControlle.frame.size.height);
NSLog(@"customBadge x: %f, y: %f, w: %f, h :%f", customBadge.frame.origin.x, customBadge.frame.origin.y,customBadge.frame.size.width, customBadge.frame.size.height);

    [self.segmentedControl addSubview:customBadge];
}

...

результаты журнала:

self.segmentedControl :<UISegmentedControl: 0x3b7bf0; frame = (83 7; 154 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x3b7c70>>
self.segmentedControl w: 154.000000, h :30.000000
customBadge x: 0.000000, y: 0.000000, w: 20.000000, h :20.000000

CustomBadge — это сторонний пользовательский класс представления значков.


person lu yuan    schedule 28.07.2012    source источник
comment
У кого-то недавно была похожая проблема - пожалуйста, проверьте, что self.segmentedControl не равен нулю. Кроме того, запишите кадр сегментированного элемента управления, а также кадр значка и добавьте его к своему вопросу.   -  person David H    schedule 28.07.2012
comment
@DavidH Пожалуйста, проверьте правку в моем посте :)   -  person lu yuan    schedule 28.07.2012
comment
привет @luyuan - просто перечитай свой PS. давайте упростим и добавим простой UIView в ваш segmentedControl. .backgroundColor = [UIColor redColor]; что-то, что появится.   -  person danh    schedule 28.07.2012
comment
@danh Да, я пытался добавить простой imageView, но он не появляется. Проблема решена, как вы видели в ответе Дэвида :)   -  person lu yuan    schedule 28.07.2012


Ответы (2)


Отлично! Спасибо. Теперь МОЖЕТ случиться так, что сегментированный элемент управления не является истинным представлением в том смысле, что его содержимое отражается в подпредставлениях (на Mac есть такие вещи, как представление вкладок) — они управляют массивом представлений, и поэтому они не на самом деле не обращайте внимания на подпредставления, когда они рисуются в методе drawRect. Таким образом, этот элемент управления может рисовать поверх вашего значка в своем drawRect. Вам придется исследовать дальше.

Тем не менее, есть решение, которое состоит в том, чтобы создать контейнер UIView того же размера, сначала добавить сегментированный элемент управления, затем добавить свой собственный значок, а затем добавить это представление контейнера в UINavigationBar. Это должно сработать.

person David H    schedule 28.07.2012
comment
Я думаю, ты правильно понял, @David. Вот к чему я стремился, пытаясь добавить простой UIVew, просто чтобы посмотреть, имеет ли сегментированный элемент управления нормальную иерархию представлений. И я согласен с обходным путем. +1 - person danh; 28.07.2012
comment
Кроме того, надеюсь, вы не обижаетесь на это (и я понимаю, что форум не в восторге от такого рода комментариев), но я думаю, что это действительно круто, что кто-то в возрасте 61 года пишет код для iOS. Я заметил, что многие инженеры не поддерживают свои навыки на современном уровне намного старше половины этого возраста. Я надеюсь подражать вам. - person danh; 28.07.2012
comment
Хах - спасибо за просмотр. Сейчас почти 62. Я люблю свою работу — я тоже езжу по 2 часа в одну сторону в Нью-Йорк на работу! Вот почему у меня так много времени, чтобы отвечать на вопросы :-) Раньше я занимался встроенными системами, но работа в США иссякла, я переключился на работу на Mac (трудно найти, но интересно), а затем перешел на iOS, когда начали появляться вакансии. . Будьте в курсе! Я до сих пор покупаю книги среднего уровня и читаю их (последнюю книгу Мэтта Нойберга), хожу на WWDC и постоянно читаю документы Apple. Я старше родителей большинства моих коллег! - person David H; 28.07.2012
comment
Да, я настоящий фанат Apple :-) - person David H; 28.07.2012

Я никогда не использовал CutomBadge, но я думаю, что вам нужно установить рамку.

person danh    schedule 28.07.2012
comment
Да, мне нужно установить рамку. Пожалуйста, проверьте обновление моего поста :) - person lu yuan; 28.07.2012