Подтвердить что ты не робот

Значения элементов панели табуляции по умолчанию с помощью быстрого Xcode 6

Окружающая среда: - Xcode 6 beta 4 - Быстрый язык - Приложение с вкладками iOS (проект по умолчанию xCode)

Как я могу изменить серый цвет по умолчанию на вкладках на что-то еще? (Желательно в глобальном масштабе)

Что касается моих исследований, мне нужно как-то изменить режим рендеринга изображений для каждой вкладки в режиме оригинальной рендеринга, но я не знаю, как

4b9b3361

Ответ 1

Каждый элемент вкладки табуляции (по умолчанию) состоит из текста и значка. Весьма легко изменить цвета текста по всему миру, указав внешний вид:

// you can add this code to you AppDelegate application:didFinishLaunchingWithOptions: 
// or add it to viewDidLoad method of your TabBarController class
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)

С ситуацией с изображениями немного сложнее. Вы не можете определить их внешний вид во всем мире. Вы должны переопределить их в своем классе TabBarController. Добавьте ниже код viewDidLoad в класс TabBarController:

for item in self.tabBar.items as [UITabBarItem] {
    if let image = item.image {
        item.image = image.imageWithColor(UIColor.yellowColor()).imageWithRenderingMode(.AlwaysOriginal)
    }
}

Как мы знаем, в классе UIImage нет метода imageWithColor(...). Итак, вот реализация расширения:

// Add anywhere in your app
extension UIImage {
    func imageWithColor(tintColor: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

        let context = UIGraphicsGetCurrentContext() as CGContextRef
        CGContextTranslateCTM(context, 0, self.size.height)
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, .Normal)

        let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
        CGContextClipToMask(context, rect, self.CGImage)
        tintColor.setFill()
        CGContextFillRect(context, rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

        return newImage
    }
}

imageWithColor был заимствован из этого ответа: fooobar.com/questions/26998/...

Ответ 2

У меня недостаточно репутации для комментирования комментариев, но многим интересно, как изменить цвет выбранного изображения.

просто добавьте еще одну проверку if let после

if let image = item.image

просто так:

if let selectedImage = item.selectedImage {
            item.selectedImage = selectedImage.imageWithColor(UIColor.yellowColor()).imageWithRenderingMode(.AlwaysOriginal)
        }

это решило проблему отлично. И небольшое дополнение, поскольку Swift 1.2 и Xcode 6.3.2 вам нужны

for item in self.tabBar.items as! [UITabBarItem]

вместо

for item in self.tabBar.items as [UITabBarItem]

Надеюсь, что это поможет!

Ответ 3

Swift 2.0

Чтобы изменить цвет по умолчанию для изображений на вкладке, добавьте ниже код viewDidLoad вашего класса TabBarController:

for item in self.tabBar.items! as [UITabBarItem] {
    if let image = item.image {
      item.image = image.imageWithColor(UIColor.yellowColor()).imageWithRenderingMode(.AlwaysOriginal)
    }
}

Обновите расширение imageWithColor. Используется с указанным выше методом и следует размещать вне класса TabBarController:

extension UIImage {
    func imageWithColor(tintColor: UIColor) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

        let context = UIGraphicsGetCurrentContext()! as CGContextRef
        CGContextTranslateCTM(context, 0, self.size.height)
        CGContextScaleCTM(context, 1.0, -1.0);
        CGContextSetBlendMode(context, CGBlendMode.Normal)

        let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect
        CGContextClipToMask(context, rect, self.CGImage)
        tintColor.setFill()
        CGContextFillRect(context, rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext() as UIImage
        UIGraphicsEndImageContext()

        return newImage
    }
}

Нет изменений в том, как текст окрашивается, но только для справки. Также следует добавить приведенный ниже код к viewDidLoad:

// you can add this code to you AppDelegate application:didFinishLaunchingWithOptions: 
// or add it to viewDidLoad method of your TabBarController class
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)

Ответ 4

Swift 3.0

Чтобы изменить цвет по умолчанию для изображений на вкладке, добавьте ниже код viewDidLoad вашего класса TabBarController:

    for item in self.tabBar.items! as [UITabBarItem] {
        if let image = item.image {
            item.image = image.imageWithColor(tintColor: UIColor.yellow).withRenderingMode(.alwaysOriginal)
        }
    }

Обновите расширение imageWithColor. Используется с указанным выше методом и следует размещать вне класса TabBarController:

extension UIImage {
 func imageWithColor(tintColor: UIColor) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)

    let context = UIGraphicsGetCurrentContext()! as CGContext
    context.translateBy(x: 0, y: self.size.height)
    context.scaleBy(x: 1.0, y: -1.0);
    context.setBlendMode(CGBlendMode.normal)

    let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
    context.clip(to: rect, mask: self.cgImage!)
    tintColor.setFill()
    context.fill(rect)

    let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage
    UIGraphicsEndImageContext()

    return newImage
 }
}