Сообщения не отображают элементы действия UIActivityViewController

Я не понимаю, почему это может произойти, поэтому я ищу кого-то, кто поможет объяснить причину.

Я сделал это переопределение в своем коде, чтобы исправить проблему, с которой я столкнулся с элементами кнопки синей панели на синей панели навигации, когда в сообщениях через действие общего доступа (все остальные кнопки имеют белый оттенок):

extension MFMessageComposeViewController {
  public override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
  }
}

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

Что может привести к этому?


person Justin Stanley    schedule 01.02.2016    source источник


Ответы (2)


В расширении переопределение сделает исходную функцию этого класса недействительной. Но наследование не будет. (Если вы вызвали супер....)

let vc: MFMessageComposeViewController = …
vc.navigationController?.navigationBar.tintColor = UIColor.whiteColor()

А потом представить.

person Lumialxk    schedule 01.02.2016
comment
Другими словами, super в расширении — это super, а в inherit — это self. - person Lumialxk; 01.02.2016
comment
Спасибо. Проблема, с которой я столкнулся, заключается в том, что я не могу на самом деле вызвать MFMessageComposeViewController, потому что его вызывает меню «Действие», поэтому я не могу сказать, что это унаследованная версия. Есть ли другой способ реализовать измененный оттенок навигационной панели? - person Justin Stanley; 01.02.2016
comment
@JustinStanley Обновил мой ответ. - person Lumialxk; 01.02.2016
comment
Итак, я предполагаю, что когда Messages делает что-то через меню действий, у него должны быть некоторые задачи, которые он выполняет из viewWillAppear(), которые аннулируются моим переопределением. Может быть, если я поставлю его во что-то вроде viewDidLayoutSubviews(), он может работать нормально... - person Justin Stanley; 01.02.2016
comment
проблема в том, что я нигде не могу это сделать, поскольку это ActionViewController, который создает и вызывает сообщения. :/ - person Justin Stanley; 01.02.2016
comment
и П.С. Вот как я справился с этим, когда мне нужно было сделать то же самое для Mail, но я сам вызывал Mail для кнопки «Отправить отзыв» в своем приложении. Это работает по-другому. - person Justin Stanley; 01.02.2016
comment
Переопределение @JustinStanley в расширении всегда опасно, потому что вы не знаете, что Apple сделала что-то в этой функции. И Apple не любит, когда разработчики делают это. - person Lumialxk; 01.02.2016
comment
@JustinStanley пытается переопределить viewWillAppear. Я исследовал некоторое время, но не нашел лучшего способа. - person Lumialxk; 01.02.2016
comment
Итак, как мне переопределить его, если все контролируется моим ActionViewController? - person Justin Stanley; 01.02.2016
comment
но разве это не то, что я сделал в своем первоначальном вопросе? - person Justin Stanley; 01.02.2016
comment
@JustinStanley Год, возможно, это вызывает некоторые ошибки, но вы должны поступать так. - person Lumialxk; 01.02.2016

Вот что работало для меня в прошлом:

// Changes Bar Color //
UINavigationBar.appearance().barTintColor = UIColor.blueColor()
// Changes Bar Button Color //
UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.classForCoder()]).tintColor = UIColor.whiteColor()
// Set Up & Show ActivityController //    
let activityController = UIActivityViewController(activityItems: ["YOUR TEXT HERE"], applicationActivities: nil)
self.presentViewController(activityController, animated: true, completion: nil)

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

person ZGski    schedule 01.02.2016
comment
Смотрите, у меня уже есть первые две строки в моем AppDelegate, но элементы Messages и Mail Action по-прежнему не имеют белых элементов barbuttonitems! Это сводит меня с ума, скажу я вам! ржу не могу. Все остальное именно так, как должно быть. - person Justin Stanley; 01.02.2016
comment
Вау, это похоже на ошибку. Я переместил первые две строки в didFinishLaunchingWithOptions() , и все работает нормально. Я бы определенно предложил очистить ваш проект, удалить и переустановить ваше приложение на устройстве, а также выйти и перезапустить Xcode. - person ZGski; 01.02.2016
comment
Я попробую! - person Justin Stanley; 01.02.2016
comment
на самом деле ... это не только я. Люди, которые используют мое приложение, тоже говорят, что это проблема. Так что я думаю, что это на самом деле проблема со стороны Apple. :/ - person Justin Stanley; 02.02.2016