【问题标题】:How can I change the label "Cancel" from modal segue in Apple Watch如何从 Apple Watch 的模态序列中更改标签“取消”
【发布时间】:2015-01-19 19:41:21
【问题描述】:

当我打开模态视图时,如何更改显示在左上角“取消”的标签...我希望它是一个带有图像的按钮。

【问题讨论】:

    标签: ios iphone swift watchkit apple-watch


    【解决方案1】:

    Cancel 标签是模态呈现的 WKInterfaceController 的默认“标题”,它显示在 Apple Watch 状态栏上。

    用图片替换标题

    无法隐藏状态栏,也无法在状态栏中显示图像,既不能作为此链接的一部分,也不能替换此链接。

    设置模式视图标题的选项

    但是,您可以将标题设置为新的字符串值。例如,您可能希望将Cancel 替换为Close。您可以通过四种方式设置此标题,如下所述。请务必阅读底部的注意,因为在大多数情况下,可能只有选项 1 可以接受。

    1. 您可以在 Interface Builder 中设置模态呈现的 WKInterfaceController 的标题。只需在 Attributes Inspector 中设置 Title 属性。当然,每个 WKInterfaceController 只能以这种方式设置一个静态标题,尽管它可以在运行时使用上述任何机制动态更改。

    2. 您可以在模式呈现的 WKInterfaceController 的 init 方法中设置标题:

      override init () {
          super.init ()        
          self.setTitle("Close")
      }
      
    3. 可以直接在模态呈现的WKInterfaceController的awakeWithContext方法中设置标题:

      override func awakeWithContext(context: AnyObject?) {
          super.awakeWithContext(context)
          self.setTitle("Close")
      }
      
    4. 您可以使用上下文变量将标题传递给模态呈现的 WKInterfaceController。在界面生成器中,将控制器的属性检查器中的identifier 设置为模态显示。 (在这个例子中,它被设置为“modalController”。)然后你通过传递所需的标题作为上下文来呈现控制器:

      self.presentControllerWithName("modalController", context: "Close")
      

      然后,在模态呈现的控制器中:

      override func awakeWithContext(context: AnyObject?) {
          super.awakeWithContext(context)                
          self.setTitle(context as? String)
      }
      

    注意:

    WatchKit 当前的“预期行为”几乎可以肯定意味着在大多数用例中只有第一个选项被视为可接受的。这是因为目前,对于其他三个选项,您最初会在加载时看到视图的默认标题,然后将替换为您使用 setTitle 设置的文本。 awakeWithContext 在视图加载后按设计运行,但即使在 init 中使用 setTitle 也不会避免默认标题的初始显示。

    上面概述的第一个选项将Cancel 替换为视图的新默认标题。如果您将界面构建器中的自定义标题与以下选项 2-4 中的任何一个结合使用,您会看到完全相同的症状(初始标题随后被您的 setTitle 替换),只是初始标题不同。

    【讨论】:

    • 嗨@Duncan Babbage,是否可以禁用“取消按钮”用户交互?我想这样做的原因是因为我有 3 个界面控制器,第 1 个呈现(模态 segue)第 2 个,第 2 个呈现((模态 segue)第 3 个。但是我想禁用第 3 个的“取消按钮”查看控制器并使用 WKInterfaceButton 返回到第一个控制器。
    • 我也有同样的情况。我不希望用户取消当前页面并返回一页,但希望他们一直回到根目录。我认为我们目前可以做的是在上下文对象中保留一个内部变量并将页面转换状态保留在那里。如果您检测到向后转换一页,则调用 popToRootController。
    • 我也在同一页。你们有什么解决方案可以禁用取消按钮吗? @user1872384
    • @Duncan Babbage 有趣的是,我发现我的标签是“abbrechen”而不是“Cancel”,但我没有将语言更改为德语(“abbrechen”是德语的“Cancel”)。这是我的相关问题帖子 - stackoverflow.com/questions/41457733/…
    【解决方案2】:

    可以删除/隐藏标题。只需将 ' ' 复制到情节提要的标题字段中。它不是 ASCII 空间。这是中国的空间。 (虽然看不到标题,但仍然可以点击左上角关闭模型视图。)

    然后你可以新建一个按钮来关闭模型视图,代码:[self dismissController];

    【讨论】:

    • ? 没有人能解决这个问题!
    【解决方案3】:

    我看了"Presenting Interface Controllers Modally" section of the WatchKit programming guide,上面写着:

    模态界面的左上角显示界面 控制器的标题字符串。当用户点击该字符串时,WatchKit 关闭模态界面。设置标题字符串以反映 解除模态界面的含义。例如,当 显示信息,您可以将字符串设置为完成或关闭。 如果 您没有为界面控制器 WatchKit 指定标题 默认显示字符串 Cancel。

    关于“取消”位,presentControllerWithName:context: 的 WKInterfaceController 文档:

    模态界面的标题设置为字符串Cancel,除非 呈现的接口控制器使用 setTitle: 方法。

    似乎表明此时您唯一的选择是另一个字符串,而不是图像。

    【讨论】:

      【解决方案4】:

      在标题中添加图像的一种有效方法是使用表情符号,尽管有限。从 Xcode 7.1 开始,模拟器似乎存在错误并在那里显示错误的字符,但它在设备上运行良好。

      setTitle("Hello world! ?")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        相关资源
        最近更新 更多