Можно ли добавить UIBarButtonItem в сегментированный элемент управления - PullRequest
0 голосов
/ 22 июня 2011

Я хочу знать, возможно ли добавить UIBarButtons в SegmentedControl.Он компилируется, но выдает ошибку времени выполнения:

-[UIBarButtonItem isEqualToString:]: unrecognized selector sent to instance 0x4b4fcc0

Вот мой код.

UIBarButtonItem *atolButton = [[UIBarButtonItem alloc] initWithTitle:@"A to L"
      style:UIBarButtonItemStyleBordered target:self action:@selector(atol:)];

UIBarButtonItem *ltozButton = [[UIBarButtonItem alloc] initWithTitle:@"L to Z"
      style:UIBarButtonItemStyleBordered target:self action:@selector(ltoz:)];

NSArray *titleButtons = [NSArray arrayWithObjects: atolButton, ltozButton, nil];

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:titleButtons];
self.navigationItem.titleView = segmentedControl;
[segmentedControl release];
...

- (void)atol:(id) sender {
NSLog(@"atol called");  
}

- (void)ltoz:(id) sender {
    NSLog(@"ltoz called");
}

Мне удалось заставить его работать со следующим кодом

NSArray *itemArray = [NSArray arrayWithObjects: @"a to l", @"l to z", nil];
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
segmentedControl.selectedSegmentIndex = 1;
[segmentedControl addTarget:self action:@selector(atol:)
     forControlEvents:UIControlEventValueChanged];

self.navigationItem.titleView = segmentedControl;

[segmentedControl release];

1 Ответ

0 голосов
/ 22 июня 2011

UISegmentedControl наследуется от UIControl, который наследуется от UIView, так что вы можете добавить к нему подвиды так же, как и в UIView.

Однако сегментированный аспект совсем другой. Каждый сегмент имеет свойство image и свойство title, но это все.

Когда вы вызываете initWithItems:, это должно быть NSArray из UIImages или NSStrings.

Я понятия не имею, что вы пытаетесь сделать, что заставляет вас добавлять кнопки в сегментированный контроллер, но вместо этого я рекомендую вам установить свойства title и image для UISegmentedController и настроить действие в любом методе, предназначенном для запуска контроллера. Например:

-(void)segmentAction:(UISegmentedController *)segment {
    if (segment.selectedSegmentIndex == 0) {
        [self atol];
    } else {
        [self ltoz];
    }
}

Я понятия не имею, что вы не можете сделать так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...