Выделение и выделение текста на этикетке - PullRequest
5 голосов
/ 13 июня 2011

Я хочу выделить, а затем выделить тот же текст на этикетке определенным цветом. Это возможно с помощью жестов.И я должен сохранить положение выделенной части, даже если приложение завершено, поэтому, когда пользователь возвращается, он может видеть эту часть выделенной

Спасибо

Ответы [ 2 ]

6 голосов
/ 13 июня 2011

Да, вы можете использовать жест с UILabel для выделения текста, изменяя либо цвет фона, либо цвет текста вашего UILabel.

. Вы также можете сохранить текущее состояние вашего UILabel с использованием NSUserDefaults и его чтение. Мы запускаем ваше приложение.

Объявите isLabelHighlighted как BOOL для UILabel state.

UITapGestureRecognizer* myLabelGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(LabelClicked:)];
[myLabelView setUserInteractionEnabled:YES];
[myLabelView addGestureRecognizer:myLabelGesture];


-(void)LabelClicked:(UIGestureRecognizer*) gestureRecognizer
{
    if(isLabelHighlighted)
    { 
         myLabelView.highlightedTextColor = [UIColor greenColor];
    }
    else 
    {
         myLabelView.highlightedTextColor = [UIColor redColor];
    }
}

Для хранения state вашего UILabel.

[[NSUserDefaults standardUserDefaults] setBool:isLabelHighlighted forKey:@"yourKey"];

Чтобы получить к нему доступ, используйте ниже.

isLabelHighlighted = [[NSUserDefaults standardUserDefaults] boolForKey:@"yourKey"];
1 голос
/ 05 октября 2016

NSUserDefaults не подходит, потому что приложение может быть неожиданно завершено UITapGestureRecognizer не поддерживаются никакие состояния, кроме UIGestureRecognizerStateEnded

- (void)viewDidLoad
{
    [super viewDidLoad];

    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognizerAction:)];
    longPressGestureRecognizer.minimumPressDuration = 0.01;
    [label setUserInteractionEnabled:YES];
    [label addGestureRecognizer:longPressGestureRecognizer];
}


- (void)longPressGestureRecognizerAction:(UILongPressGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer.state != UIGestureRecognizerStateEnded)
    {
        label.alpha = 0.3;
    }
    else
    {
        label.alpha = 1.0;

        CGPoint point = [gestureRecognizer locationInView:label];
        BOOL containsPoint = CGRectContainsPoint(label.bounds, point);

        if (containsPoint)
        {
            // Action (Touch Up Inside)
        }
    }
}
...