在iOS中显示与Android中的Toast功能相同的消息

Nil*_*mar 113 android ios

我需要知道iOS中是否存在任何与Android中的Toast消息相似的方法.也就是说,我需要显示一条消息,该消息在几秒钟后自动被解除.这类似于Android环境中Toast类的功能.

Ama*_*mar 97

你可以利用MBProgressHUD项目.

使用HUD模式MBProgressHUDModeText进行类似吐司的行为,

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];

// Configure for text only and offset down
hud.mode = MBProgressHUDModeText;
hud.label.text = @"Some message...";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;

[hud hideAnimated:YES afterDelay:3];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Kir*_*ela 84

NSString *message = @"Some message...";

UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
                                                message:message
                                               delegate:nil
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil, nil];
[toast show];

int duration = 1; // duration in seconds

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [toast dismissWithClickedButtonIndex:0 animated:YES];
});
Run Code Online (Sandbox Code Playgroud)

使用适用于iOS 9或更高版本的UIAlertViewController

NSString *message = @"Some message...";

UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:message
                                                        preferredStyle:UIAlertControllerStyleAlert];

[self presentViewController:alert animated:YES completion:nil];

int duration = 1; // duration in seconds

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [alert dismissViewControllerAnimated:YES completion:nil];
});
Run Code Online (Sandbox Code Playgroud)

Swift 3.2

let message = "Some message..."
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
self.present(alert, animated: true)

// duration in seconds
let duration: Double = 5

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
    alert.dismiss(animated: true)
}
Run Code Online (Sandbox Code Playgroud)

  • 这与toast完全相同 - 在显示对话框时禁用用户与其他视图的交互.也许有一种方法可以删除"变灰"背景,增加与屏幕上其他视图交互的能力(比如警报后面的按钮或绘画画布)? (7认同)

Sur*_*gch 47

在Android中,Toast是一条短消息,会在屏幕上显示很短的时间,然后自动消失,而不会中断用户与应用的互动.

在此输入图像描述

所以很多来自Android背景的人都想知道Toast的iOS版本是什么.除了当前的问题,其他类似的问题可以在这里,这里这里找到.答案是,在iOS中没有与Toast完全相同的东西.尽管如此,已经提出了各种解决方法,包括

但是,我的建议是坚持iOS已经提供的标准UI选项.不要试图使您的应用看起来和行为与Android版本完全相同.想想如何重新打包它,使它看起来和感觉像一个iOS应用程序.有关选择,请参阅以下链接.

考虑以传达相同信息的方式重新设计UI.或者,如果信息非常重要,那么警报可能就是答案.


Saz*_*han 20

斯威夫特4

这个小技巧怎么样?

func showToast(controller: UIViewController, message : String, seconds: Double) {
    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    alert.view.backgroundColor = UIColor.black
    alert.view.alpha = 0.6
    alert.view.layer.cornerRadius = 15

    controller.present(alert, animated: true)

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
        alert.dismiss(animated: true)
    }
}
Run Code Online (Sandbox Code Playgroud)

调用示例:

showToast(controller: self, message : "This is a test", seconds: 2.0)
Run Code Online (Sandbox Code Playgroud)

  • 看起来很棒。谢谢! (2认同)

Ged*_*bel 15

斯威夫特3

对于没有第三方代码的简单解决方案:

在此输入图像描述

只需使用普通的UIAlertController,但使用style = actionSheet(请查看下面的代码)

let alertDisapperTimeInSeconds = 2.0
let alert = UIAlertController(title: nil, message: "Toast!", preferredStyle: .actionSheet)
self.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + alertDisapperTimeInSeconds) {
  alert.dismiss(animated: true)
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案的优点:

  1. Android喜欢Toast消息
  2. 仍然iOS外观和感觉

  • 聪明的一个。我永远都不会想到这一点,谢谢:D (2认同)

Ham*_*ian 5

对于Swift 3 & 4

使用烤面包机

Toast(text: "Hello, world!", duration: Delay.long)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

对于Swift 2

使用JLToast