MFMailComposeViewController中的自定义UINavigationBar背景

时间:2011-09-08 06:42:40

标签: iphone uinavigationbar

我需要在UINavigationBar中使用MFMailComposeViewController的自定义背景。以前我在UINavigationBar上使用了一个类别来实现我的应用程序,但Apple特别要求您不要这样做。此外,这可能适用于目前在NDA下的iOS版本,也可能不适用。

我现在正在使用UINavigationBar的子类来实现我在应用程序其余部分中所看到的外观,但我看不出有任何方法可以将其与MFMailComposeViewController一起使用。有什么想法吗?

注意:我知道在未来版本的iOS中执行此操作的方法,但这需要针对SDK的当前版本(4.3)构建。

5 个答案:

答案 0 :(得分:3)

我刚刚遇到过这个问题 - 您可以使用object_setClass动态注入视图控制器使用的类。

#import <objc/runtime.h>

object_setClass(mailController.navigationBar, [YourNavigationBarSubClass class]);

答案 1 :(得分:2)

您可以使用以下代码使用自定义视图自定义导航栏的titleView。扩展了这个想法,你可以能够调整titleView的大小以覆盖整个导航栏,并使用自定义背景来模拟自定义导航栏背景。

我能想到的唯一可能的粘性部分是你需要确保titleView位于工具栏中的按钮后面。

获得MFMailComposerViewController参考后,以下是自定义titleView的代码:

[self presentModalViewController:controller animated:YES];

UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(//set size to navbar size)];
[backgroundView setBackgroundColor:[UIColor colorWithPatternImage://your custom image ]];

controller.topViewController.navigationItem.titleView = backgroundView ;
[controller release];

答案 2 :(得分:1)

邮件撰写界面本身不可自定义,您的应用程序不得修改。

查看苹果参考资料以获取更多信息...

http://developer.apple.com/library/ios/#documentation/MessageUI/Reference/MFMailComposeViewController_class/Reference/Reference.html

但我们可以根据上述答案定制邮件构成....

答案 3 :(得分:0)

经过一些黑客攻击和测试后,仍无法自定义按钮。但通过设置邮件控制器的色调,这是我能得到的最接近的。

尝试通过mailController.navigationBar.items,访问它们,这是一个条形项目数组。

MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;
mailController.navigationBar.tintColor = [UIColor brownColor];  

答案 4 :(得分:0)

虽然能够更好地控制外观会很好,但我认为没有一种干净的方法。当你无法改变它时......隐藏它:

NSDictionary *attributes = @{NSForegroundColorAttributeName: [UIColor clearColor]};
[[UINavigationBar appearance] setTitleTextAttributes:attributes];