【问题标题】:How can I use the MDCSnackbarMessage completion handler?如何使用 MDCSnackbarMessage 完成处理程序?
【发布时间】:2018-02-16 13:49:04
【问题描述】:

我正在尝试在此 repo 中显示的小吃店消息的末尾运行一些代码: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 {

}

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

【问题讨论】:

    标签: swift material-components-ios


    【解决方案1】:

    我得到了来自官方开发团队的信息丰富且快速的回复。非常感谢 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];
    }
    

    斯威夫特

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

    【讨论】:

      【解决方案2】:

      我不知道它是否会帮助你,但我最近使用这个库向用户显示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 类来初始化和显示任何带有您想要的标题/消息的 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
      

      【讨论】:

      • 感谢您的回答,但我们目前正在广泛使用这个框架,并且为小吃店引入一个特定的框架感觉有点过头了。但它看起来确实不错,而且效果与我希望我们使用的一样。
      • 好的,谢谢您的反馈。然后我会尝试让你的 SnackBar 工作:)
      • 我要求的是完成处理程序而不是 actionHandler。我想你可能误读了标题:)。
      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      相关资源
      最近更新 更多