禁用 MFMessageComposeViewController 的自定义外观

Posted

技术标签:

【中文标题】禁用 MFMessageComposeViewController 的自定义外观【英文标题】:Disabling Custom Appearance For MFMessageComposeViewController 【发布时间】:2013-10-07 03:19:16 【问题描述】:

当用户在 MFMessageComposeViewController 的收件人部分输入姓名时,收件人栏会变黑并消失。用户仍然可以发送消息、输入文本和执行所有其他操作,只是看不到收件人栏。

我感觉这可能(也可能不是)是因为 MFMessageComposeViewController 的导航栏是自定义的(背景图片和自定义字体)。

1.我的导航栏的自定义外观是为整个应用设置的,如何为 MFMessageComposeViewController 禁用它?

2。这个故障还有其他原因吗?是 ios7 的错误吗?

【问题讨论】:

【参考方案1】:

是的,这里的问题是因为我使用 UIAppearance 代理 UINavigationBars

那么是什么解决了这个问题呢?

我没有尝试更改 MFMessageComposeViewController 本身更像是一个应用程序,而是自定义了我自己的应用程序。

我没有使用[UINavigationBar appearance],而是使用[UINavigationBar appearanceWhenContainedIn:[SomeNavigationController class], nil]

如果你能做到这一点,我认为这真的很简单,因为尝试自定义 MFMessageComposeViewController 可能会很烦人。

以上所有内容都适用于 MFMailComposeViewController。

【讨论】:

我无法更改文本颜色,我尝试这样做:[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBarTintColor:[UIColor whiteColor]]; [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setTintColor:[UIColor whiteColor]]; [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,nil] forState:UIControlStateNormal]; 我不认为iOS允许你直接使用appearanceWhenContainedIn来改变MFMailComposeViewController的颜色(因为它是一个基于系统的视图控制器)【参考方案2】:

我遇到了同样的问题,这是我的解决方案-

在展示您的消息作曲家之前([self presentViewController:messageComposer animated:YES completion:nil];) 设置

[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

在委托方法中

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                 didFinishWithResult:(MessageComposeResult)result 
     UIImage *backgroundImage = [UIImage imageNamed:@"Navigation Bar"];
    [[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
    [self dismissViewControllerAnimated:YES completion:nil];

就是这样!!

【讨论】:

以上是关于禁用 MFMessageComposeViewController 的自定义外观的主要内容,如果未能解决你的问题,请参考以下文章

JS禁用右键+禁用Ctrl+u+禁用F12

如何禁用a标签,是禁用事件,而不是啥阻止跳转之类的

jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等

如何在 Laravel 中禁用 CSRF 令牌以及为啥我们必须禁用它?

CDR被禁用后功能有影响不