gpt4 book ai didi

iphone - 两行 UISegmentedControl

转载 作者:行者123 更新时间:2023-12-03 21:24:17 34 4
gpt4 key购买 nike

是否可以让 UISegmentedControl 在 iPhone 上跨越两行?我已经在一些应用程序中看到了这一点,但没有在文档中找到我需要的内容。也许它是一个自定义的 UIButton,设计得像 UISegmentedControl。

最佳答案

我也在找这个。

我什至希望第二行看起来像第一行的一部分,更像是一个网格。只能找到使用第二个 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

关于iphone - 两行 UISegmentedControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045350/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com