iOS:背景图像导航栏邮件撰写视图控制器

时间:2012-09-14 09:43:16

标签: ios ios5 uinavigationbar mfmailcomposeviewcontroller

从iOS 5开始,可以很容易地自定义UINavigationBar的背景图像,但在设置MFMailComposeViewController的背景图像时似乎缺少某些内容。我使用以下代码段设置MFMailComposeViewController

的实例
if ([MFMailComposeViewController canSendMail])) {
    // Initialization
    MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init];
    [vc setModalPresentationStyle:UIModalPresentationFormSheet];

    // Navigation Bar
    [[vc navigationBar] setBackgroundImage:[UIImage imageNamed:@"navbar_top"] forBarMetrics:UIBarMetricsDefault];

    // Configuration
    [vc setMailComposeDelegate:self];

    // Present Mail Compose View Controller
    [self presentViewController:vc animated:YES completion:nil];
}

虽然条形按钮项目已正确蒙皮,但邮件撰写视图控制器的导航栏却没有。我忽略了什么吗?

4 个答案:

答案 0 :(得分:2)

只需在“myAppDelegate.m”中添加一些代码,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"blueBarBG.png"] forBarMetrics:UIBarMetricsDefault];
    ...
}

希望它能帮到你

答案 1 :(得分:0)

编辑:参考custom-background-for-uinavigationbar链接。

我想你可能给出错误的图片名称:navbar_top可能是navbar_top.png或navbar_top.jpg

你可以试试这个:

if([[UINavigationBar class] respondsToSelector:@selector(appearance)]) //iOS >=5.0
{
  [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navbar_top.png"] forBarMetrics:UIBarMetricsDefault];
}

答案 2 :(得分:0)

您可以这样做,因为MFMailComposeViewController类继承自

UINavigationController : UIViewController : UIResponder : NSObject

但是请浏览一下苹果文档。 Apple不会允许这样做。

重要

邮件撰写界面本身不可自定义,您的应用程序不得修改。此外,在显示界面后,您的应用程序不允许对电子邮件内容进行进一步更改。用户仍然可以使用界面编辑内容,但忽略程序化更改。因此,您必须在呈现界面之前设置内容字段的值。

了解更多信息MFMailComposeViewController_class

如果您仍想实施,那么这可能会对您有所帮助 changing-the-navigation-bar-with-MFMailComposeViewController

答案 3 :(得分:0)

出示控制器后

// Present Mail Compose View Controller
[self presentViewController:vc animated:YES completion:nil];

将图像添加为像这样的imageView

UIImage *image = [UIImage imageNamed: @"navbar_top.png"];
UIImageView * iv = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,42)];
iv.image = image;
iv.contentMode = UIViewContentModeCenter;
[[[vc viewControllers] lastObject] navigationItem].titleView = iv;
[[vc navigationBar] sendSubviewToBack:iv];
[iv release];

但我相信iOS4会带来某种保护。

此处明确指出,您不得更改Apple提供的界面。

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

重要提示:邮件撰写界面本身不可自定义,您的应用程序不得修改。此外,在显示界面后,您的应用程序不允许对电子邮件内容进行进一步更改。用户仍然可以使用界面编辑内容,但忽略程序化更改。因此,您必须在呈现界面之前设置内容字段的值。

我搜索了论坛,有些人拒绝了他们的应用,所以我猜你应该不要这样做。

希望它有所帮助。快乐的编码:)