我需要在UINavigationBar
中使用MFMailComposeViewController
的自定义背景。以前我在UINavigationBar
上使用了一个类别来实现我的应用程序,但Apple特别要求您不要这样做。此外,这可能适用于目前在NDA下的iOS版本,也可能不适用。
我现在正在使用UINavigationBar
的子类来实现我在应用程序其余部分中所看到的外观,但我看不出有任何方法可以将其与MFMailComposeViewController
一起使用。有什么想法吗?
注意:我知道在未来版本的iOS中执行此操作的方法,但这需要针对SDK的当前版本(4.3)构建。
答案 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)
邮件撰写界面本身不可自定义,您的应用程序不得修改。
查看苹果参考资料以获取更多信息...
但我们可以根据上述答案定制邮件构成....
答案 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];