2011-09-08 94 views
2

我需要在MFMailComposeViewController中使用UINavigationBar的自定义背景。之前我在UINavigationBar上使用了一个类别来实现这个功能,但Apple特别要求您不要这样做。此外,这可能或可能不适用于当前处于NDA下的iOS未来版本。MFMailComposeViewController中的自定义UINavigationBar背景

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

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

+0

检查我的答案关于'object_setClass'下面。这似乎有效。 – memmons

回答

3

我只是碰到这种跑 - 你可以动态地将视图控制器使用使用object_setClass类。

#import <objc/runtime.h> 

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

这感觉有点危险,但是这确实在我有权访问的所有版本的iOS上都能正常工作。有一点要注意的是,子类不能有任何ivars。 –

0

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

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

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

我可以自定义按钮,没有问题。这是我需要定制的背景。 –

+0

检查我更新的代码 –

1

邮件组成接口本身不可定制,也不能由您的应用程序修改。

更多信息检查苹果的参考...

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

但我们可以自定义邮件组成OIN上面给出的答案....

+0

这是真的,但我从来没有遇到应用程序因此而被拒绝的问题,我相信它会创造更好的体验。 –

+0

哦谢谢dudee ...我也不知道abt应用程序拒绝...即时通讯新的iphone开发.. –

+0

我们可以自定义发送,删除按钮在MFMailComposeViewController .. –

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]; 
+0

整洁的想法 - 它实际上并不适用于我,因为按钮背后的背景是错误的,但你会为创意而得到赞赏! –

0

尽管能更好地控制外观,但我不认为有一个干净的方法。当你不能改变它...隐藏它:

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