2013-04-23 2 views
0

Я попытался подкласс UISegmentedControl.
Я передаю NSArray с точки зрения и постараюсь установить заголовки для UISegmentedControl из этого NSArray.
Я использовал метод initWithArray, но он не устанавливает значение из массива.Настройка заголовков для UISegmentedControl из NSArray

Вот мой подкласс UISegmentedControl.

WTSegmentedControl.h

@interface WTSegmentedControl : UISegmentedControl { 

} 
@end 

WTSegmentedControl.m

#import "WTSegmentedControl.h" 

@implementation WTSegmentedControl 

- (id)initWithItems:(NSArray *)items { 
    if (self = [super initWithItems:items]) { 

    } 
    return self; 
} 

Теперь с точки зрения я звоню этот метод.

Я подключил выход так:

@property (nonatomic,strong) IBOutlet WTSegmentedControl *control; 

- (void)viewDidLoad { 
    NSArray *names = [[NSArray alloc] initWithObjects:@"yes", @"no", nil]; 
    control = [[WTSegmentedControl alloc] initWithItems:names]; 
} 

NSArray правильно передает но titles не установлены.

Может ли кто-нибудь помочь мне в этом?

+1

где вы создаете объект управления? Вы импортировали этот класс в этот класс? –

+0

@HinataHyuga Я создал этот объект управления своим представлением. Пожалуйста, посмотрите, что отредактированный quetion. – suji

ответ

1

Ok, так что вы создаете элемент управления в Interface Builder или с помощью кода !? Вы не можете обойти оба. Если вы хотите создать его в коде, удалить IBOutlet часть в вашей собственности и добавить элемент управления в подвид после инициализации:

// adding the control by code 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSArray *names = [[NSArray alloc] initWithObjects:@"yes", @"no", nil]; 
    control = [[WTSegmentedControl alloc] initWithItems:names]; 
    control.frame = CGRectMake(x,z,width,height); 
    [self.view addSubview: control]; 
} 

Но если вы хотите создать его в InterfaceBuilder, вы не должны повторно инициализировать его. Задайте свой собственный класс в Interface Builder, а затем просто установите такие заголовки:

// using Interface Builder 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSArray *names = [[NSArray alloc] initWithObjects:@"yes", @"no", nil]; 
    [names enumerateObjectsUsingBlock:^(NSString *title, NSUInteger idx, BOOL *stop) { 
     [control setTitle:title forSegmentAtIndex:idx]; 
    }]; 
} 
+0

проверено все еще не работает – suji

+0

Я обновил свой ответ. – calimarkus

+0

Мне нужно использовать этот контроль segmeted во многих частях моего кода. Так я попытался подклассифицировать его и попытался использовать его в качестве элемента управления (или утилиты). Так что я просто позвоню этому методу. Есть ли способ сделай это? – suji

0

Если вы правильно подключили свой контроль IBOutlet, тогда переменная управления автоматически устанавливается в этот момент. Это делается при загрузке представления. Так линия:

control = [[WTSegmentedControl alloc] initWithItems:names]; 

должен быть изменен на это:

[control initWithItems:names]; 
+0

Я пробовал это, но не работал. Также, когда мне так нравится, я получаю проблему «Результат выражения не используется». – suji

Смежные вопросы