我正在使用带有一些自定义图像的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的样式,并使用我自己的图像自定义控件没有背景?我也想拥有自己的“选定”状态图像。
可能的?
答案 0 :(得分:3)
尼克,
在玩了一段时间后,我决定简单地“滚动自己”。
我在photoshop中制作了一些按钮图像,并使所有内容看起来像一个分段控件。然后,我为所有按钮的“选定”状态设置了不同的图像。当按下一个按钮时,我将setSelected:NO调用给其他按钮。然后,我处理了我需要做的任何事情。
我很乐意听到其他解决方案。
答案 1 :(得分:0)
除了DexterW的回答。我做出了同样的决定 - 仅使用UISegmentedControl
来模仿UIButtons
然而,模仿UISegmentControl
并不是一项简单的任务。我尝试使用Selected
的{{1}}状态但UIButton
如果为UIButton
和Hightlighted
设置相同的设置(bg图像,字体颜色),则无法按预期工作状态。在这种情况下,当片段看起来被选中时,它仍然可以按下"视觉。因此,为了避免它并使按钮设置更像Selected
,我根本没有使用UISegmentedControl
状态。相反,我决定在代码中更改所选按钮的外观,以便所选按钮的selected
和normal
状态在视觉上相同,而未选中按钮则不同。
假设我有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是绑定的。
不能说这是一个最好的主意,但它对我来说非常适合。