Изменение UITableViewCell' s дефолт style' s subviews' класс

Я в настоящее время работаю над обновлением для моего приложения. Одна из новых возможностей, которые я намереваюсь включить, требует, чтобы я заменил класс UILabel в UITableViewCell . Однако я ранее использовал один из стилей по умолчанию, обеспеченных в XCode для клеток, и выбор заменить класс отключен.

Есть ли какая-либо работа для этого, не имея необходимость переписывать большую часть моего кода?

1
nl ja de

1 ответы

Чтобы определенно сделать, что вы спрашиваете, я просто изменил бы некоторые классы вокруг использования некоторых изящных Объективных-C хакерских проникновений. Вот то, как:

1) Создайте новый подкласс UILabel. Для этого примера я буду использовать названный класс SwizzleLabel .

2) В этом новом классе этикетки, добавьте метод, чтобы применить некоторые стили к нему (как изменение цвета текста к тому, что вы хотели бы, и т.д.). Это - в основном замена для init метода.

-(void)applyStyles {

    [self setBackgroundColor:[UIColor blueColor]];
    [self setTextColor:[UIColor redColor]];
    [self setHighlightedTextColor:[UIColor orangeColor]];

}

3) Import wherever you're going to be making this class change (for example, in your view controller, etc).

4) В вашем cellForRowAtIndexPath: метод, создайте Класс .

Class newLabelClass = objc_getClass("SwizzleLabel");

5) Обменяйте классы.

object_setClass([cell textLabel], newLabelClass);

6) Наконец примените некоторые пользовательские стили, которые вы имеете (в основном замена для init метода).

[[cell textLabel] performSelector:@selector(applyStyles)];

Теперь, необходимо видеть, что вы полностью обменяли классы этикетки к своему подклассу. Мой финал cellForRowAtIndexPath: метод был похож так:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath {

    UITableViewCell *cell = [[UITableViewCell alloc] init];

    Class newLabelClass = objc_getClass("SwizzleLabel");
    object_setClass([cell textLabel], newLabelClass);
    [[cell textLabel] performSelector:@selector(applyStyles)];

    [[cell textLabel] setText:@"Testing"];

    return cell;

}
2
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.