【问题标题】:iphone: how to set UISegmentedCotrol at navigation item programmatically?iphone:如何以编程方式在导航项中设置 UISegmentedControl?
【发布时间】:2013-02-25 19:09:11
【问题描述】:

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

导航项已经有title,left bar button,和right bar button 我可以把它放在left bar buttontitle之间吗

另外,我怎样才能以编程方式向该控件提供事件?

我使用了以下代码:

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

【问题讨论】:

  • 不,你不能在左栏按钮和标题之间放置一个段控件。你可以做的是在段控件中添加你的左栏按钮作为另一个段,然后在左栏按钮项中添加该段控件.
  • @Gypsa:这真的可能吗?
  • @Gypsa,你说得对,我无法在 leftbarbutton 和 title 之间放置分段控件

标签: iphone objective-c ios4 uisegmentedcontrol


【解决方案1】:

导航栏的空间不大,但您可以像这样将分段控件添加到导航栏的标题视图中:

 [[self navigationItem] setTitleView:segImport];

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

【讨论】:

  • 其他选项包括将分段控件放在屏幕底部的工具栏或导航栏下方。
  • 导航栏下方可以是一个选项,但我的是 UITableViewController 类
【解决方案2】:

@Heena:嗨..

您只需要像往常一样准备 UISegmented Control。

那么你需要使用:

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

self.navigationItem.rightBarButtonItem = seg;

希望这会有所帮助。

编辑:

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

但是,如果您想要一种方法来使它工作/解决这个问题,请随时与我联系。

【讨论】:

  • 你是对的。我不能那样做,所以我把它放在导航栏下面
【解决方案3】:

以下代码可能对您有所帮助,

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) {

    }

}

【讨论】:

    【解决方案4】:

    导航栏有点棘手。我不认为您可以将另一个项目作为子视图添加到其中,因为您已达到最多两个,因此您只需将 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;
    
        }
    

    【讨论】:

    • 我需要将此代码放入任何函数中,对吗?那么控件怎么知道现在应该调用这个函数呢?
    • 当分段控件的值发生变化时,应该调用这段代码。
    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多