如何使用 MDCSnackbarMessage 完成处理程序?

How can I use the MDCSnackbarMessage completion handler?

我正在尝试 运行 在此存储库中显示的快餐栏消息末尾执行一些代码:https://github.com/material-components/

但是我真的不明白一个方法的语法足以实现它。这一个具体来说:https://github.com/material-components/material-components-ios/blob/develop/components/Snackbar/src/MDCSnackbarMessage.h#L125

@property(nonatomic, copy, nullable) MDCSnackbarMessageCompletionHandler completionHandler;

// I've tried a'lot of different ways but nothing works:

let message = MDCSnackbarMessage()

message.completionHandler (success: Bool?) -> Void in do {

}

message.completionHandler = true in {

}

老实说,我对方法语法的理解不够好,无法使用它。

我不知道它是否对你有帮助,但我最近使用这个库向用户显示 SnackBar

它非常易于使用和实施。

您可以安装 pod 并使用此示例代码立即试用:

let snack = LPSnackbar(title: "Hello SnackBar", buttonTitle: "Cancel")

snack.height = 60

// Customize the snack
snack.bottomSpacing = 80
snack.view.titleLabel.font = UIFont.systemFont(ofSize: 20)

// Show a snack to allow user to undo deletion
snack.show(animated: true) { (undone) in
      if undone {
         // Undo deletion, handle action to revert back    
      } else {
         // Follow through with deletion
      }
}

编辑: 您可能想使用 Utils Class 来初始化和显示任何带有 title/message 的 SnackBar,并处理回调中的操作。

会更干净。希望对你有帮助。

编辑 2: 我查看了您的库,找到了解释如何使用不同选项实现 SnackBar 的示例。

这是在没有任何用户操作的情况下显示一条简单消息:

let message = MDCSnackbarMessage()
message.text = "Tesla is going to Mars"
MDCSnackbarManager.show(message)

这是带有操作的消息(您不理解的处理程序):

let action = MDCSnackbarMessageAction()
let actionHandler = {() in
  let answerMessage = MDCSnackbarMessage()
  answerMessage.text = "Fascinating"
  MDCSnackbarManager.show(answerMessage)
}
action.handler = actionHandler
action.title = "OK"
message.action = action

我从官方开发团队那里得到了丰富的信息和快速的回​​复。非常感谢 romoore 提供的帮助。

ObjC

- (void)showSimpleSnackbar:(id)sender {
  MDCSnackbarMessage *message = [[MDCSnackbarMessage alloc] init];
  message.text = @"Snackbar Message";

  // Added this assignment to demonstrate completion blocks.
  message.completionHandler = ^(BOOL userInitiated) {
  NSLog(@"Hello, world!");
 };

 [MDCSnackbarManager showMessage:message];
}

Swift

MDCSnackbarManager.show(message)
message.completionHandler = {(_ userInitiated: Bool) -> Void in
    print("Hello, world!")
}