Как изменить несколько цветов текста UILabel при прокрутке внутри прокрутки Objective-c iOS - PullRequest
0 голосов
/ 18 декабря 2018

Привет, я новичок в разработке для iOS. Может ли кто-нибудь помочь мне? Я добавил несколько UILabel в UIScrollview на основе количества массивов. Например, если число массивов равно 3, значит ... затем в scrollview добавляем 3 представления вместе сUILabel в каждом представлении ..

Так что теперь 3 представления имеют 3 разных UILabels ..

Но теперь я хочу изменить цвет текста UILabel в разных представлениях в зависимости от требований ... но я невозможность обновления цвета…

Изменение цвета текста UILabel только для последнего индекса.

Я написал код в ScrollViewDidScroll: (UIScrollView *) scrollView

Любое предложение..

self.robotScrollView.contentSize = CGSizeMake(robotCounts*Robot_ScrollView_Width, kRobotSrollViewH);
for (int i=0; i<robotCounts; i++) {
    self.robotLabel = [[UILabel alloc] initWithFrame:CGRectMake(Robot_ScrollView_Width*i, 0 , Robot_ScrollView_Width, kRobotSrollViewH)];
    self.robotLabel.textAlignment = NSTextAlignmentCenter;
    self.robotLabel.backgroundColor = [UIColor clearColor];
    self.robotLabel.textColor = [UIColor blackColor];
    [self.robotScrollView addSubview:self.robotLabel];
    if (kRemoteManager.robotsArray.count == 0) {
        self.robotLabel.text = @"当前无酷控机器人";
        break;
    }
    DeviceBase *robot = kRemoteManager.robotsArray[i];
    self.robotLabel.text = [NSString stringWithFormat:@"%@",robot.dName];

}
self.robotScrollView.contentOffset = CGPointMake(Robot_ScrollView_Width*currentRobotIndex, 0);

Изменение цвета UIlabeltext в методе scrollviewdidscroll, указанном ниже

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView == self.scrollView)
    {
        self.pageControl.currentPage = (scrollView.contentOffset.x+(scrollView.width/2)) / scrollView.width;
        kRemoteManager.currentIndex = self.pageControl.currentPage;
        [[NSNotificationCenter defaultCenter] postNotificationName:kNotify_Steward_ReloadData object:nil];
        NSMutableArray *viewRemoteIDarray = [NSMutableArray array];
        CardRemoteModel *model =  kRemoteManager.cardRemoteArray[self.pageControl.currentPage];
            if (![viewRemoteIDarray containsObject:@(model.remoteID)])
            {
                if (model.remoteType == kooKong_remoteType_AirCleaner || model.remoteType == kooKong_remoteType_AC)
                {
                    self.robotLabel.textColor = [UIColor whiteColor];
                }
            else
                {
                self.robotLabel.textColor = [UIColor blackColor];
                }
            }
    } else if (scrollView == self.robotScrollView) {
        kRemoteManager.currentRobotIndex = (scrollView.contentOffset.x+(scrollView.width/2)) / scrollView.width;
        self.leftBtn.hidden = NO;
        self.rightBtn.hidden = NO;
        if (kRemoteManager.currentRobotIndex == kRemoteManager.robotsArray.count-1) {
            self.rightBtn.hidden = YES;
        }
        if (kRemoteManager.currentRobotIndex == 0){
            self.leftBtn.hidden = YES;
        }
    }
}

1 Ответ

0 голосов
/ 18 декабря 2018

Есть три метки, но только одно свойство метки.Последний назначенный - единственный, к которому у вас будет доступ позже.Одним из решений было бы сохранить массив меток в контроллере представления.

@property(nonatomic, strong) NSMutableArray *labels;

В опубликованном методе ...

self.labels = [NSMutableArray array];
for (int i=0; i<robotCounts; i++) {
    UILabel *robotLabel = [[UILabel alloc] initWithFrame:CGRectMake(Robot_ScrollView_Width*i, 0 , Robot_ScrollView_Width, kRobotSrollViewH)];

    [self.labels addObject:robotLabel];                 // <--- new

    robotLabel.textAlignment = NSTextAlignmentCenter;
    robotLabel.backgroundColor = [UIColor clearColor];
    robotLabel.textColor = [UIColor blackColor];
    [self.robotScrollView addSubview:robotLabel];
    if (kRemoteManager.robotsArray.count == 0) {
        robotLabel.text = @"当前无酷控机器人";
        break;
    }
    DeviceBase *robot = kRemoteManager.robotsArray[i];
    robotLabel.text = [NSString stringWithFormat:@"%@",robot.dName];
}

Чтобы изменить все цвета:

- (void)setLabelColors:(UIColor *)color {
    for (UILabel *label in self.labels) {
        label.textColor = color;
    }
}

Другой идеей было бы присвоить каждому ярлыку тег и найти его, когда он вам нужен.

for (int i=0; i<robotCounts; i++) {
    self.robotLabel = [[UILabel alloc] initWithFrame:CGRectMake(Robot_ScrollView_Width*i, 0 , Robot_ScrollView_Width, kRobotSrollViewH)];
    self.robotLabel.tag = i+1;
    // the remainder of this loop as you have it

Чтобы изменить все цвета ...

- (void)setLabelColors:(UIColor *)color {
    for (int i=0; i<robotCounts; i++) {
        UILabel *label = (UILabel *)[self.robotScrollView viewWithTag:i+1];
        label.textColor = color;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...