2010-01-11 21 views
2

是否有可能在iPhone上有兩行UISegmentedControl?我已經在幾個應用程序中看到了這一點,但沒有找到我需要的文檔。也許這是一個定製的UIButton,看起來像UISegmentedControl。兩行UISegmentedControl

回答

0

這是不可能使用標準UISegmentedControl - 你必須自己繪製它。

1

我也在尋找這個。

我甚至希望第二行看起來像第一行的一部分,更像一個網格。 只能找到使用第二個UISegmentedControl,並將其與另一個技巧組合以照顧不必要的圓角邊緣。


我在執行我從UIControl(從UIView的繼承)繼承, 新增2 UISegmentControls,2個UIViews剪輯的邊緣,使它們看起來爲一體。

此外我做了一些調整,以設置視覺中心的文本域。

水平方向很容易擴展,只需很小的努力就可以添加第三行...行。

標題:

// YHSegmentedGridControl.h 
#import <UIKit/UIKit.h> 

@interface YHSegmentedGridControl : UIControl{ 
    UISegmentedControl *a,*b; 
    UIView *va,*vb; 
} 

- (void)setSelectedSegmentIndex:(NSInteger)index; 
- (NSInteger)selectedSegmentIndex; 

@end 

在.m文件:

// YHSegmentedGridControl.m 
// UITestSegment2D 
// Created by Yh on 22/04/13. 

#import "YHSegmentedGridControl.h" 

@implementation YHSegmentedGridControl 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 

     [self initWithDefaults]; 
    } 
    return self; 
} 

實際工作:

-(void) initWithDefaults{ 
    a = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects: @"1", @"2", nil]]; 
    b = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects: @"3", @"4", nil]]; 

    float e = 75; 
    int d = (int)e/7; 

    [a setFrame:CGRectMake(0, 0, 2*e, e+2*d)]; 
    [b setFrame:CGRectMake(0, -2*d, 2*e, e+2*d)]; 

    [a setContentOffset:CGSizeMake(0, -d) forSegmentAtIndex:0]; 
    [a setContentOffset:CGSizeMake(0, -d) forSegmentAtIndex:1]; 
    [b setContentOffset:CGSizeMake(0, +d) forSegmentAtIndex:0]; 
    [b setContentOffset:CGSizeMake(0, +d) forSegmentAtIndex:1]; 

    [a addTarget:self 
      action:@selector(pickOne:) 
forControlEvents:UIControlEventValueChanged]; 
    [b addTarget:self 
      action:@selector(pickOne:) 
forControlEvents:UIControlEventValueChanged]; 

    va = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 2*e, e)]; 
    vb = [[UIView alloc] initWithFrame:CGRectMake(0, e, 2*e, e)]; 

    [va setClipsToBounds:YES]; 
    [vb setClipsToBounds:YES]; 

    [self setFrame:CGRectMake(0,0,2*e,2*e)]; 

    [va addSubview:a]; 
    [vb addSubview:b]; 

    [self addSubview:va]; 
    [self addSubview:vb]; 
} 

- (void)setSelectedSegmentIndex:(NSInteger)index{ 
    if(index == UISegmentedControlNoSegment){ 
     [a setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
     [b setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
    } else if(index < a.numberOfSegments){ 
     [a setSelectedSegmentIndex:index]; 
     [b setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
    } else if(index < (a.numberOfSegments + b.numberOfSegments)){ 
     [b setSelectedSegmentIndex:(index - a.numberOfSegments)]; 
     [a setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
    }else 
     NSLog(@"No such segment: index to high"); 
} 


- (NSInteger)selectedSegmentIndex{ 
    if(a.selectedSegmentIndex != UISegmentedControlNoSegment) 
     return a.selectedSegmentIndex; 
    else if(b.selectedSegmentIndex != UISegmentedControlNoSegment) 
     return b.selectedSegmentIndex + a.numberOfSegments; 
    else 
     return UISegmentedControlNoSegment; 
    return 0; 
} 

- (void)pickOne:(id)sender{ 
    if(sender == a) 
     [b setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
    if(sender == b) 
     [a setSelectedSegmentIndex:UISegmentedControlNoSegment]; 
    //notify 
    [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

@end