Поместить self.editbuttonitem в сегментированный контроль как barbuttonitem? - PullRequest
0 голосов
/ 27 августа 2011

Я хочу сделать NavBar похожим на тот, что в примере 3 из образца кода NavBar , за исключением того, что я хочу использовать self.editbuttonItem в качестве одной из двух кнопок в SegmentedControl.(Другой будет пользовательская кнопка добавления.) По сути, конечным результатом будет leftBarButtonItem, представляющий собой всего одну кнопку, вызывающий модальное представление, и rightBarButtonItem, представляющий собой сегментированный элемент управления с кнопками редактирования и добавления.

Дело в том, что для настройки SegmentedControl требуется массив строк или изображений, но не BarButtonItems.Есть ли обходной путь?

Это соответствующий бит из образца Apple:

    // "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, kCustomButtonHeight);
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];

Вместо изображений я хочу поместить BarButtonItems ...

1 Ответ

0 голосов
/ 27 августа 2011

Если self.editbuttonitem является UIBarButtonItem с заголовком «Редактировать», я думаю, что вы можете сделать следующий код

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
                                        [NSArray arrayWithObjects:
                                            @"Edit", @"AnotherButtonName"
                                         nil]];

редактировать на основе комментария Чарльза Бандеса

Добавьте действие к segmentedControl, как пример Apple:

[segmentedControl addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

//...

, затем в segmentAction:, сделайте

- (void)segmentAction:(UISegmentedControl*)sender
{
    //if the "edit" item in segmentedControl is selected
    if (sender.selectedSegmentIndex == 0)
    {
        //I assume self is a UITableView instance
        //start editing
        [self setEditing:YES animated:YES];
    }
}

Я написал этот код на своем ПК.Однако это должно работать.

Вы можете взглянуть на [UITableView setEditing: animated:]

...