Добавление вертикального селектора алфавитов в UIView - PullRequest
1 голос
/ 17 февраля 2011

Привет. Могу ли я добавить вертикальный селектор букв, который мы используем в UITableView, в UIView?С наилучшими пожеланиями

Ответы [ 3 ]

3 голосов
/ 17 февраля 2011

Да.

Если вы создаете UIView самостоятельно, вы можете делать все, что захотите.

Это не так сложно в вашем случае.Некоторые UILabels как подпредставления и некоторая логика в 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

enter image description here

как обычно, я не проверял наличие ошибок, и это не должно быть решением для копирования и вставки.

1 голос
/ 17 февраля 2011

Вы можете использовать разные UILabels и устанавливать для них теги. Теперь, чтобы обнаружить прикосновения к соответствующей метке, вы можете использовать классы UITapGestureRecognizer

0 голосов
/ 17 февраля 2011

Если вы говорите о клавиатуре, то она не может быть позиционирована иначе, чем позиция по умолчанию, по той причине, что яблоко не позволяет менять свою позицию. Надеюсь, это поможет вам. Спасибо.

...