【问题标题】:Multiple uisegmentedcontrol in 1 view not working1个视图中的多个uisegmentedcontrol不起作用
【发布时间】:2013-01-10 03:08:19
【问题描述】:

我有一个带有 2 个 uisegmentedcontrols 的视图,一个在底部,一个在导航栏中。底部的工作正常,导航栏中的那个出现,但没有拾取任何触摸事件。底部段(工作)的代码是:

    footerSegment = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"1", @"2", nil]];
[footerSegment setFrame:CGRectMake(5, 6, 310, 30)];
[footerSegment setSegmentedControlStyle:UISegmentedControlStyleBar];
footerSegment.selectedSegmentIndex = 0;
//segmentFiltering.tintColor = [UIColor colorWithWhite:80.0/255.0 alpha:1.0];
[footerSegment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
[footerSegment setTag:0];
[footerSegment setBackgroundColor:[UIColor clearColor]];
UIImage *segSelected = [[UIImage imageNamed:@"segment_sel.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0];
UIImage* menuRightImage = [[UIImage imageNamed:@"button.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
[footerSegment setBackgroundImage:menuRightImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[footerSegment setBackgroundImage:segSelected 
                            forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

UIImage *segmentDividerImg = [[UIImage imageNamed:@"div.png"] stretchableImageWithLeftCapWidth:0 topCapHeight:0];
// Image between two unselected segments.
[footerSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateNormal
                rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
// Image between segment selected on the left and unselected on the right.
[footerSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateSelected
                rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
// Image between segment selected on the right and unselected on the right.
[footerSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateNormal
                rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[footerToolBar addSubview:footerSegment];

导航栏代码如下(可见但不起作用):

    headSegment = [[UISegmentedControl alloc]
               initWithItems:[NSArray arrayWithObjects:@"A", @"B", nil]];
[headSegment setFrame:CGRectMake(50, 7, 200, 29)];
[headSegment setSegmentedControlStyle:UISegmentedControlStyleBar];
headSegment.selectedSegmentIndex = 0;
[headSegment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];

[headSegment setBackgroundColor:[UIColor clearColor]];
[headSegment setBackgroundImage:menuRightImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[headSegment setBackgroundImage:segSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[headSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[headSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[headSegment setDividerImage:segmentDividerImg forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[headSegment setTag:1];
[self.navigationController.navigationBar addSubview:headSegment];

操作代码:

    -(void)segmentAction:(UISegmentedControl*)sender
{
    if(sender.tag == 0){
    NSLog(@"Selected index: %d", sender.selectedSegmentIndex);
    }
    else{
        if (sender.selectedSegmentIndex = 1) {
            NSLog(@"Selected HEAD index: %d", sender.selectedSegmentIndex);
        }

}

【问题讨论】:

    标签: ios objective-c uisegmentedcontrol


    【解决方案1】:
    [self.navigationController.navigationBar addSubview:headSegment];
    

    这不是您向导航栏添加内容的方式。您必须通过导航控制器的navigationItem 工作。您可以将分段控件设为titleView,也可以将其包装在条形按钮项中并将其设为右按钮或左按钮之一。

    【讨论】:

    • 改成self.navigationController.navigationItem.titleView = head segment;
    • 你怎么知道的?您的 segmentAction 实施并未测试所有可能性。无条件地在开头放一个日志。
    • 还是什么都没有,底部分段控件运行它的日志,但是点击导航栏分段控件甚至没有进入动作方法
    • 知道了!这就是您外包开发时会发生的情况:(有人用一个什么都没做的清除按钮覆盖导航栏,荒谬。感谢您的帮助
    • 我打算提出类似的建议(实际上我打算建议其他代码将您的 enabled 设置为 NO...) 外包或不外包,总是有其他代码和它可以做奇怪的事情... :)
    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多