Как сделать прямой эффект для изменения цвета шрифта?
Я разрешаю, когда пользователь выбирает цвет шрифта из ActionSheetPicker, тогда цвет шрифта текста изменяется при изменении цвета. Я использую стороннюю библиотеку https://github.com/skywinder/ActionSheetPicker-3.0
Как мне это сделать?
Я должен изменить в сторонней библиотеке или сделать настройку ActionSheetPicker.
Есть ли какое-либо событие изменения значения, чтобы сделать эту функциональность?
2 ответа
В готовом блоке showPickerWithTitle:rows:initialSelection:doneBlock:cancelBlock:origin
Вы можете узнать, какой индекс или значение было выбрано, и соответствующим образом изменить цвет вашего текста.
[ActionSheetStringPicker showPickerWithTitle:@"Select a Color"
rows:colors
initialSelection:0
doneBlock:^(ActionSheetStringPicker *picker, NSInteger selectedIndex, id selectedValue) {
yourLabel.textColor = ...
}
cancelBlock:^(ActionSheetStringPicker *picker) {
NSLog(@"Block Picker Canceled");
}
origin:sender];
Сначала в вашем проекте перейдите в папку Picker и откройте ActionSheetStringPicker.m
затем добавьте ниже код
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
NSString *str_lbl = (self.data)[(NSUInteger) row];
//NSLog(@"////////%@",obj);
UILabel *label = (UILabel*) view;
if (label == nil)
{
label = [[UILabel alloc] init];
}
[label setText:str_lbl];
// This part just colorizes everything, since you asked about that.
[label setTextColor:[UIColor whiteColor]];
if ([str_lbl isEqualToString:@"Red"])
{
[label setTextColor:[UIColor redColor]];
}
else if([str_lbl isEqualToString:@"Green"])
{
[label setTextColor:[UIColor greenColor]];
}
else if([str_lbl isEqualToString:@"Blue"])
{
[label setTextColor:[UIColor blueColor]];
}
else if([str_lbl isEqualToString:@"Orange"])
{
[label setTextColor:[UIColor orangeColor]];
}
else
{
}
// [label setBackgroundColor:[UIColor blackColor]];
CGSize rowSize = [pickerView rowSizeForComponent:component];
CGRect labelRect = CGRectMake (0, 0, rowSize.width, rowSize.height);
[label setFrame:labelRect];
return label;
}