如何在Apple Watch中更改模态segue中的“取消”标签

时间:2015-01-19 19:41:22

标签: ios iphone swift watchkit apple-watch

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

4 个答案:

答案 0 :(得分:24)

标签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)
    }
    
  5. 注意:

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

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

答案 1 :(得分:6)

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

然后,您可以创建一个新按钮,使用代码[self dismissController];

关闭模型视图

答案 2 :(得分:2)

我看了"Presenting Interface Controllers Modally" section of the WatchKit programming guide,其中说:

  

模态界面的左上角显示界面   控制器的标题字符串。当用户点击该字符串时,WatchKit   驳回模态界面。设置标题字符串以反映   解雇模态界面的意义。例如,何时   显示信息,您可以将字符串设置为“完成”或“关闭”。 如果   您没有为您的界面控制器WatchKit指定标题   默认情况下显示字符串取消。

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

  

模态接口的标题设置为取消字符串,除非   呈现的接口控制器使用显式更改它   setTitle:方法。

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

答案 3 :(得分:0)

在标题中放入图像的一种有效的方法是使用表情符号字符。从Xcode 7.1开始,模拟器似乎遇到了一个错误并在那里显示错误的字符,但它在设备上运行得非常好。

setTitle("Hello world! ")