iphone:如何以编程方式在导航项中设置UISegmentedControl?

时间:2011-08-31 04:28:59

标签: iphone objective-c ios4 uisegmentedcontrol

我需要以编程方式在导航项上实现UISegmentedControl,因为我do not have XIB for that

导航项已有titleleft bar buttonright bar button 我可以将其放在left bar buttontitle

之间

另外,如何以语法方式向该控件发送事件?

我使用了以下代码:

segImport = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Own",@"Imported",nil]];
                 [segImport setFrame:CGRectMake(80, 0, 200, 30)];
    [segImport setSegmentedControlStyle:UISegmentedControlStyleBar];

4 个答案:

答案 0 :(得分:5)

导航栏中没有太多空间,但您可以将分段控件添加到导航栏的标题视图中,如下所示:

 [[self navigationItem] setTitleView:segImport];

查看此article以获取有关完成此操作的完整教程。

答案 1 :(得分:3)

@Heena:嗨..

您只需像往常一样准备UISegmented控件。

然后你需要使用:

UIBarButtonItem * seg = [[UIBarButtonItem alloc] initWithCustomView:segmentControlObject];

self.navigationItem.rightBarButtonItem = seg;

希望这有帮助。

修改

至于你是否可以将它放在leftbarbutton和title之间。那么答案是否定的,你不能这样做。

但如果您想要一种方法让它工作/解决,请随时与我联系。

答案 2 :(得分:1)

以下代码可以为您提供帮助,

UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 40)];
UISegmentedControl *segment = [[UISegmentedControl alloc] initWithItems:@[@"One", @"Two", @"Three"]];
segment.frame = CGRectMake(0, 0, 150, 40);
[segment addTarget:self action:@selector(onSegmentChanged:) forControlEvents:UIControlEventValueChanged];
[customView addSubview:segment];
self.navigationItem.titleView = customView;

- (void)onSegmentChanged:(id)sender
{
    UISegmentedControl *segment = (UISegmentedControl *)sender;
    if (segment.selectedSegmentIndex == 0) {

    }
    else if (segment.selectedSegmentIndex == 1) {

    }
    else if (segment.selectedSegmentIndex == 2) {

    }

}

答案 3 :(得分:0)

导航栏有点棘手。我不认为你可以将另一个项目作为子视图添加到其中,因为你达到最多两个,所以你只需要将UISegmentedControl放在导航栏上。至于检测分段控件的选定段何时更改,请使用以下switch语句:

switch (self.segementControl.selectedSegmentIndex) {

    case 0: {

        //the first segment is selected
        break;

    } case 1: {

        //the second segment is selected
        break;

    } case 2: {

        //the third segment is selected
        break;

    } default: {

        break;

    }