开发者

Put self.editbuttonitem into segmentedcontrol as barbuttonitem?

I want to make a NavBar similar to the one in sample 3 of the NavBar sample code, except I want to use the self.editbuttonItem as one of the two buttons in the SegmentedControl. (The other will be a custom add button.) Basically - the end result will be a leftBarButtonItem that's just one button, bringing up a modal view, and a rightBarButtonItem that's a segmented control with both edit and add buttons.

Thing is, it looks like setting up the SegmentedControl needs an array of Strings or Images, but not BarButtonItems. Is there a workaround?

This is the relevant bit from Apple's sample:

开发者_开发问答    // "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];

Instead of the images, I want to put BarButtonItems...


If self.editbuttonitem is a UIBarButtonItem with title "Edit", I think you can do with the following code

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

edit based on Charles Bandes's comment

Add an action to the segmentedControl, like the Apple's sample:

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

//...

then in segmentAction:, do

- (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];
    }
}

I wrote those code on my PC. However it should work.

You may take a look at [UITableView setEditing:animated:]

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜