Существует проблема с настройкой цвета оттенка на представлении после представления; даже если вы сделаете это в блоке завершения presentViewController: анимированный: завершение :, это вызывает мерцание на цвет названия кнопок. Это неудобно, непрофессионально и совершенно неприемлемо.
Другие представленные решения зависят от остаточной статичности представления, что Apple не хочет делать. Ожидайте, что эти решения не сработают в будущих версиях iOS.
Единственный верный способ решить эту проблему и сделать ее повсюду - это добавить категорию в UIAlertController и swizzling viewWillAppear.
Заголовок:
//
// UIAlertController+iOS9TintFix.h
//
// Created by Flor, Daniel J on 11/2/15.
//
#import <UIKit/UIKit.h>
@interface UIAlertController (iOS9TintFix)
+ (void)tintFix;
- (void)swizzledViewWillAppear:(BOOL)animated;
@end
Реализация:
//
// UIAlertController+iOS9TintFix.m
//
// Created by Flor, Daniel J on 11/2/15.
//
#import "UIAlertController+iOS9TintFix.h"
#import <objc/runtime.h>
@implementation UIAlertController (iOS9TintFix)
+ (void)tintFix {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method method = class_getInstanceMethod(self, @selector(viewWillAppear:));
Method swizzle = class_getInstanceMethod(self, @selector(swizzledViewWillAppear:));
method_exchangeImplementations(method, swizzle);});
}
- (void)swizzledViewWillAppear:(BOOL)animated {
[self swizzledViewWillAppear:animated];
for (UIView *view in self.view.subviews) {
if (view.tintColor == self.view.tintColor) {
//only do those that match the main view, so we don't strip the red-tint from destructive buttons.
self.view.tintColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
[view setNeedsDisplay];
}
}
}
@end
Добавить .pch (предварительно скомпилированный заголовок) в ваш проект и включить категорию:
#import "UIAlertController+iOS9TintFix.h"
Убедитесь, что вы правильно зарегистрировали свой pch в проекте, и он будет включать методы категорий в каждом классе, который использует UIAlertController.
Затем, в вашем приложении делегаты didFinishLaunchingWithOptions, импортируйте свою категорию и вызовите
[UIAlertController tintFix];
, и он будет автоматически распространяться на каждый экземпляр UIAlertController в вашем приложении, независимо от того, запущен ли ваш код или кто-то еще.
Это решение работает как для iOS 8 .X и iOS 9.X, и отсутствует мерцание подхода пост-презентации с изменением оттенка. Он также полностью агностик в отношении иерархии представлений подменю UIAlertController.
Счастливый взлом!
Если вы зайдете на http://kenwheeler.github.io/slick/ и выполните поиск для синхронизации слайдера, он покажет демо, функционирующее очень похоже на то, что вы описываете. [112 ]
Чтобы перенаправить слайд по клику, в HTML сделайте ссылки на контент слайдов с помощью ссылки, указывающей, куда вы хотите перейти.
Если я не пропустил ваше намерение, это почти точно поведение ползунка, показанное на https://www.masterclass.com .
Дайте мне знать, если это поможет! Удачи!