1

嗨,我可以在 UIView 中添加我们在 UITableView 中使用的垂直字母选择器吗?此致

4

3 回答 3

3

是的。

如果你自己创建 UIView,你可以做任何你想做的事情。

在你的情况下,这甚至没有那么难。一些 UILabel 作为子视图和一些逻辑touchesDidSomething:withEvent:来确定哪个标签靠近触摸。

还有一个委托方法,告诉您触摸了哪个部分。


我想我可能需要这样的东西,所以我决定尝试一下。

//myIndexSelectorView.m

- (id)initWithFrame:(CGRect)frame andLabels:(NSArray *)l {
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor lightGrayColor];
        self.layer.cornerRadius = frame.size.width/2;
        labels = [l retain];
        NSInteger count;
        for (NSString *string in labels) {
            CGFloat margin = 5.0f;
            CGFloat yPosition = count*(frame.size.height/[labels count]);
            UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(margin, yPosition, frame.size.width-2*margin, frame.size.height/[labels count])] autorelease];
            label.backgroundColor = [UIColor clearColor];
            label.textColor = [UIColor darkGrayColor];
            label.textAlignment = UITextAlignmentCenter;
            label.text = string;
            [self addSubview:label];
            count++;
        }
    }
    return self;
}

- (void)touch:(UITouch *)touch {
    CGPoint touchPosition = [touch locationInView:self];
    NSInteger index = touchPosition.y / (self.bounds.size.height / [labels count]);
    NSLog(@"Touched: %@", [labels objectAtIndex:index]);
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    [self touch:touch];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    [self touch:touch];
}

- (void)dealloc {
    [labels release];
    [super dealloc];
}

按预期工作,看起来类似于 uitableview 的索引选择器

在此处输入图像描述

像往常一样,我没有检查错误,这不应该是复制粘贴解决方案。

于 2011-02-17T07:49:43.230 回答
1

您可以使用不同的 UILabel,并为它们设置标签。现在要检测对适当标签的触摸,您可以使用 UITapGestureRecognizer 类

于 2011-02-17T08:05:09.830 回答
0

如果您在谈论键盘,那么除了默认位置之外,它不能被定位,原因是苹果不允许更改其位置。希望对您有所帮助。谢谢。

于 2011-02-17T07:44:49.753 回答