2016-02-01 3 views
2

Как изменить цвет слова в «сообщение» в AlertViewКак изменить цвет отдельных букв или одно слово в строке

@@IBAction func btn_instructions(sender: UIButton) { 
    let alertView = UNAlertView(title: "MyTitle", message: "Here green text, here red text") 
alertView.show() 

Извините, если вопрос не является правильным.

+2

Обратите внимание, что 'UIAlertView' является устаревшим в iOS9 (я принимаю' UNAlertView' выше опечатка). Вместо этого вы должны использовать 'UIAlertController'. – dfri

+1

@LeoDabus Фактически он приписал свойства текста, '" attribitedTitle "и' "attribittedMessage" для заголовка и текста сообщения, соответственно. Однако, насколько я могу найти, они не документированы Apple; Я могу найти их только в качестве ссылок, полученных пользователями через [intestpection времени выполнения] (https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UIAlertController.h). – dfri

+0

Имеет ли UIAlertAction также атрибут «attribitedTitle»? – zeeple

ответ

0

Это невозможно с UIAlertController (UIAlertView устарел). UIAlertController принимает необязательную строку для параметров title и message (см. Apple's Documentation on UIAlertController).

Чтобы использовать несколько цветов в строке текста, вам необходимо использовать NSAttributedString (здесь хорошо NSAttributedString Tutorial).

Поскольку String не может хранить какие-либо атрибуты, вы не сможете использовать NSAttributedString в UIAlertController. Вам нужно будет создать свой собственный модальный ViewController с ярлыком NSAttributedString, чтобы отображать то, о чем вы просите.

+0

Фактически вы можете использовать атрибутированные строки для 'UIAlertController', используя KVC и key' attributedMessage'. – dfri

+0

@dfri Полезно знать! – hoffware

1

Как я уже писал в своем комментарии выше, UIAlertView устарел, поэтому вместо этого вам придется использовать UIAlertController. Вы можете указать , присваивая строки для сообщения, используя (небезопасное) кодирование с ключом (поскольку UIAlertView является подклассом NSObject): установка атрибутной строки для ключа "attributedMessage". Соответствующий ключ для заголовка - "attributedTitle".

Обратите внимание, что эти функции, кажется, насколько я могу найти --- недокументированные Apple, на которые ссылаются только как полученные пользователями через runtime introspection.

В качестве примера следует ниже:

import UIKit 

class ViewController: UIViewController { 

    // ... 

    @IBAction func showAlert(sender: UIButton) { 

     let alertController = UIAlertController(title: "Foo", message: "", preferredStyle: UIAlertControllerStyle.Alert) 

     /* attributed string for alertController message */ 
     let attributedString = NSMutableAttributedString(string: "Bar Bar Bar!") 

     attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), 
      range: NSRange(location:0,length:3)) 
     attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), 
      range: NSRange(location:4,length:3)) 
     attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueColor(), 
      range: NSRange(location:8,length:3)) 

     alertController.setValue(attributedString, forKey: "attributedMessage") 

     /* action: OK */ 
     alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
     self.presentViewController(alertController, animated: true, completion: nil) 
    } 
} 

Получение следующий результат:

enter image description here

+0

Имеет ли UIAlertAction также атрибут «attribitedTitle»? Я хотел бы указать шрифт и размер Actions. – zeeple