iPhone:UISegmentedControl,具有按下状态的自定义图像

时间:2010-09-09 23:07:56

标签: iphone uiview uiimage uisegmentedcontrol

我正在使用带有一些自定义图像的UISegmentedControl:

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"0.png"] atIndex:0 animated:NO];
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"1.png"] atIndex:1 animated:NO];
[segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"2.png"] atIndex:2 animated:NO];
segmentedControl.frame = CGRectMake(0, 0, 90, 30);
[self.view addSubview:segmentedControl];
[segmentedControl release];

这部分工作正常。但是,它仍然使用Apple的样式进行控制,只是在其上添加了我的图像。有没有办法我不必使用Apple的样式,并使用我自己的图像自定义控件没有背景?我也想拥有自己的“选定”状态图像。

可能的?

2 个答案:

答案 0 :(得分:3)

尼克,

在玩了一段时间后,我决定简单地“滚动自己”。

我在photoshop中制作了一些按钮图像,并使所有内容看起来像一个分段控件。然后,我为所有按钮的“选定”状态设置了不同的图像。当按下一个按钮时,我将setSelected:NO调用给其他按钮。然后,我处理了我需要做的任何事情。

我很乐意听到其他解决方案。

答案 1 :(得分:0)

除了DexterW的回答。我做出了同样的决定 - 仅使用UISegmentedControl来模仿UIButtons 然而,模仿UISegmentControl并不是一项简单的任务。我尝试使用Selected的{​​{1}}状态但UIButton如果为UIButtonHightlighted设置相同的设置(bg图像,字体颜色),则无法按预期工作状态。在这种情况下,当片段看起来被选中时,它仍然可以按下"视觉。因此,为了避免它并使按钮设置更像Selected,我根本没有使用UISegmentedControl状态。相反,我决定在代码中更改所选按钮的外观,以便所选按钮的selectednormal状态在视觉上相同,而未选中按钮则不同。
假设我有3个按钮segmentedControl(LeftSgm | MiddleSgm | RightSgm)和正常状态Im使用bg图片命名为" segment_default"和字体颜色白色和选定状态其bg图片名为" segment_active"和黑色字体。所以在onTouchDown:

highlighted

,被调用的方法是

-(IBAction)onTopMenuTap:(id)sender
{
    int newSelectedSegmentIndex;
    if (sender == btnLeftSgm)
        newSelectedSegmentIndex=0;
    else if (sender == btnMiddleSgm)
        newSelectedSegmentIndex=1;
    else if (sender == btnRightSgm)
        newSelectedSegmentIndex=2;
    else
        return;

    NSLog(@"Tapped segment index %d while old one is %d",newSelectedSegmentIndex,selectedSegmentIndex);

    if (newSelectedSegmentIndex==selectedSegmentIndex)
        return;

    [self handleSegmentAppearenace:newSelectedSegmentIndex];
//do whatever its need to be done
...
}

所有三个按钮都在IB中绑定到相应的属性(btnRightSgm等)。也适用于"触摸事件" onTopMenuTap是绑定的。
不能说这是一个最好的主意,但它对我来说非常适合。