【发布时间】:2015-01-19 19:41:21
【问题描述】:
当我打开模态视图时,如何更改显示在左上角“取消”的标签...我希望它是一个带有图像的按钮。
【问题讨论】:
标签: ios iphone swift watchkit apple-watch
当我打开模态视图时,如何更改显示在左上角“取消”的标签...我希望它是一个带有图像的按钮。
【问题讨论】:
标签: ios iphone swift watchkit apple-watch
Cancel 标签是模态呈现的 WKInterfaceController 的默认“标题”,它显示在 Apple Watch 状态栏上。
无法隐藏状态栏,也无法在状态栏中显示图像,既不能作为此链接的一部分,也不能替换此链接。
但是,您可以将标题设置为新的字符串值。例如,您可能希望将Cancel 替换为Close。您可以通过四种方式设置此标题,如下所述。请务必阅读底部的注意,因为在大多数情况下,可能只有选项 1 可以接受。
您可以在 Interface Builder 中设置模态呈现的 WKInterfaceController 的标题。只需在 Attributes Inspector 中设置 Title 属性。当然,每个 WKInterfaceController 只能以这种方式设置一个静态标题,尽管它可以在运行时使用上述任何机制动态更改。
您可以在模式呈现的 WKInterfaceController 的 init 方法中设置标题:
override init () {
super.init ()
self.setTitle("Close")
}
可以直接在模态呈现的WKInterfaceController的awakeWithContext方法中设置标题:
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
self.setTitle("Close")
}
您可以使用上下文变量将标题传递给模态呈现的 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 替换),只是初始标题不同。
【讨论】:
可以删除/隐藏标题。只需将 ' ' 复制到情节提要的标题字段中。它不是 ASCII 空间。这是中国的空间。 (虽然看不到标题,但仍然可以点击左上角关闭模型视图。)
然后你可以新建一个按钮来关闭模型视图,代码:[self dismissController];
【讨论】:
我看了"Presenting Interface Controllers Modally" section of the WatchKit programming guide,上面写着:
模态界面的左上角显示界面 控制器的标题字符串。当用户点击该字符串时,WatchKit 关闭模态界面。设置标题字符串以反映 解除模态界面的含义。例如,当 显示信息,您可以将字符串设置为完成或关闭。 如果 您没有为界面控制器 WatchKit 指定标题 默认显示字符串 Cancel。
关于“取消”位,presentControllerWithName:context: 的 WKInterfaceController 文档:
模态界面的标题设置为字符串Cancel,除非 呈现的接口控制器使用
setTitle:方法。
似乎表明此时您唯一的选择是另一个字符串,而不是图像。
【讨论】:
在标题中添加图像的一种有效方法是使用表情符号,尽管有限。从 Xcode 7.1 开始,模拟器似乎存在错误并在那里显示错误的字符,但它在设备上运行良好。
setTitle("Hello world! ?")
【讨论】: