• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - MFMailComposeViewController iOS 上缺少取消和发送按钮

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:53:51 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在开发一个 iOS 应用程序,用户可以在其中发送电子邮件和发送短信。我正在使用 MFMailComposeViewController 和 MFMessageComposeViewController 发送电子邮件和短信,但有时取消和发送按钮会出现在 Composer 上,有时它根本不会出现。这个问题是随机的,我已经尝试了很多。任何帮助将不胜感激。 代码

  MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
  mail.mailComposeDelegate = self;
  [mail setSubject:Email_Subject];
  [mail setMessageBody:Share_Message isHTML:NO];
  [mail setToRecipients[@""]];
  [self presentViewController:mail animated:YES completion:NULL];

我已经在我的 viewController 的头文件中实现了 MFMailComposeViewControllerDelegate。



Best Answer-推荐答案


好的,我终于对此有了一些了解。我的问题部分源于我在应用程序委托(delegate) (Swift) 中更改导航栏颜色:

    UINavigationBar.appearance().barTintColor = UIColor.black
    UIApplication.shared.statusBarStyle = .lightContent

    // To get my hamburger menu white colored
    UINavigationBar.appearance().tintColor = UIColor.white

由于这一点,以及与缩放模式的一些交互(参见我上面的评论),有时我会在我的邮件 Controller 中将取消/发送按钮设置为白色。像这样:

enter image description here

我将向您展示我的类(class)( Objective-C ),它显示了邮件 Controller ,现在它可以帮助我解决这个问题中的问题。注意这一行:

[UINavigationBar appearance].tintColor = appleBlueTintColor;

真的是这一切的秘诀:

#import <MessageUI/MessageUI.h>

@interface SendEmail : MFMailComposeViewController

// Returns nil if can't send email on this device. Displays an alert before returning in this case.
- (id) initWithParentViewController: (UIViewController *) parent;

// Show the email composer.
- (void) show;

// Message to append to the bottom of support emails. The string doesn't contain HTML.
+ (NSString *) getVersionDetailsFor: (NSString *) appName;

@end

@interface SendEmail ()<MFMailComposeViewControllerDelegate>
@property (nonatomic, weak) UIViewController *myParent;
@property (nonatomic, strong) UIColor *previousBarTintColor;
@property (nonatomic, strong) UIColor *previousTintColor;
@end

#import "SendEmail.h"
#import <sys/utsname.h>
@implementation SendEmail

- (id)initWithNibNameNSString *)nibNameOrNil bundleNSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

// Using this init method depends on the `show` method being called immediately after-- to reset the nav bar colors back to what they were originally.
- (id) initWithParentViewController: (UIViewController *) theParent {
    if (![MFMailComposeViewController canSendMail]) {
        NSString *title = @"Sorry, the app isn't allowed to send email.";
        NSString *message = @"Have you configured this device to send email?";
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle"OK" style:UIAlertActionStyleDefault handler:nil]];
        [theParent presentViewController:alert animated:YES completion:nil];
        return nil;
    }

    // The default app nav bar color is black-- and that looks bad on the mail VC. Need to change and then set back both the barTintColor and the tintColor (in the `show` method).

    self.previousBarTintColor = [UINavigationBar appearance].barTintColor;
    self.previousTintColor = [UINavigationBar appearance].tintColor;

    [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];

    // I got this color from the digital color meter-- this is what it is supposed to be on the Cancel/Send buttons.
    UIColor *appleBlueTintColor = [UIColor colorWithRed:31.0/255.0 green:134.0/255.0 blue:254.0/255.0 alpha:1.0];
    [UINavigationBar appearance].tintColor = appleBlueTintColor;

    self = [super init];
    if (self) {
        self.mailComposeDelegate = self;
        self.myParent = theParent;
    }

    return self;
}

- (void) show {
    [self.myParent presentViewController:self animated:YES completion:^{
        [[UINavigationBar appearance] setBarTintColor: self.previousBarTintColor];
        [UINavigationBar appearance].tintColor = self.previousTintColor;
    }];
}

- (void)mailComposeControllerMFMailComposeViewController*)controller didFinishWithResultMFMailComposeResult)result errorNSError*)error {
    [self.myParent dismissViewControllerAnimated:YES completion:nil];
}

+ (NSString *) getVersionDetailsFor: (NSString *) appName;
{
    NSMutableString *message = [NSMutableString string];
    [message appendString"\n\n\n--------------\n"];
    [message appendFormat"iOS version: %@\n", [[UIDevice currentDevice] systemVersion]];
    [message appendFormat"%@ version: %@ (%@)\n", appName,
     [[NSBundle mainBundle] objectForInfoDictionaryKey"CFBundleShortVersionString"],
     [[NSBundle mainBundle]objectForInfoDictionaryKey"CFBundleVersion"]];
    [message appendFormat"Hardware: %@\n", [self machineName]];

    return message;
}

// See http://stackoverflow.com/questions/11197509/ios-iphone-get-device-model-and-make
+ (NSString *) machineName;
{
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine
                              encoding:NSUTF8StringEncoding];
}

@end

关于ios - MFMailComposeViewController iOS 上缺少取消和发送按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42189722/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap