Скрытый статус WKInterfaceButton в WatchKit
Есть ли способ проверить текущий скрытый статус WKInterfaceButton в WatchKit?
2 ответа
WKInterfaceButton
у класса есть метод, унаследованный от WKInterfaceObject
класс под названием setHidden:
что вы можете использовать, чтобы показать / скрыть кнопку, а с помощью вспомогательной переменной вы можете программно установить статус WKInterfaceButton
,
Что-то вроде следующего примера:
class InterfaceController: WKInterfaceController {
@IBOutlet var button: WKInterfaceButton!
var buttonIsHidden: Bool!
override func awakeWithContext(context: AnyObject?) {
self.changeStatusOfButton(true)
}
private func changeStatusOfButton(status: Bool) {
// set programmatically the status of the button to hide/show
self.activityButton.setHidden(status)
// save the current status
self.buttonIsHidden = status
}
private func showButtonAgain() {
self.changeStatusOfButton(false)
}
}
И всякий раз, когда вы хотите узнать, скрыта ли кнопка / показать, вам нужно только проверить переменную buttonIsHidden
,
Я надеюсь, что это поможет вам.
Похоже, вы не можете этого сделать. Но вы можете хранить свою собственную переменную в состоянии и использовать ее.
Ниже вы можете проверить определение родительского класса кнопки.
public class WKInterfaceObject : NSObject {
public func setHidden(hidden: Bool)
public func setAlpha(alpha: CGFloat)
@available(watchOS 2.0, *)
public func setHorizontalAlignment(horizontalAlignment: WKInterfaceObjectHorizontalAlignment)
@available(watchOS 2.0, *)
public func setVerticalAlignment(verticalAlignment: WKInterfaceObjectVerticalAlignment)
public func setWidth(width: CGFloat)
public func setHeight(height: CGFloat)
@available(watchOS 2.0, *)
public func setRelativeWidth(width: CGFloat, withAdjustment adjustment: CGFloat)
@available(watchOS 2.0, *)
public func setRelativeHeight(height: CGFloat, withAdjustment adjustment: CGFloat)
@available(watchOS 2.0, *)
public func sizeToFitWidth()
@available(watchOS 2.0, *)
public func sizeToFitHeight()
public var interfaceProperty: String { get } // same as controller's property name
}
Как указано в предыдущем ответе, вы должны поддерживать свою собственную переменную, чтобы отслеживать, скрыты ли группа, метка, кнопка и т. Д. Или нет. Простой и элегантный способ сделать это - объявить переменные отслеживания с помощью наблюдателей свойств следующим образом:
@IBOutlet weak var btnChange: WKInterfaceButton!
@IBOutlet weak var lblPending: WKInterfaceLabel!
@IBOutlet weak var lblConfirmed: WKInterfaceLabel!
// Property observers. Set initial values to match storyboard / initial setup
var btnChangeIsHidden = false {didSet{btnChange.setHidden(btnChangeIsHidden)}}
var lblPendingIsHidden = true {didSet{lblPending.setHidden(lblPendingIsHidden)}}
var lblConfirmedIsHidden = true {didSet{lblConfirmed.setHidden(lblConfirmedIsHidden)}}
Мы используем строгое соглашение об именах, чтобы всегда было очевидно, какой объект присваивается переменной отслеживания. После того, как вы объявили свои переменные и наблюдателей, тогда в коде вы всегда будете ссылаться только на переменные отслеживания. Вы можете запросить их текущее состояние и назначить новое состояние, поскольку для всех целей и задач они могут рассматриваться как свойство объекта. Например
if !self.lblPendingIsHidden {
// In a pending state; reset to status before attempted change
// Toggle button / label
self.btnChangeIsHidden = !self.btnChangeIsHidden
self.lblPendingIsHidden = !self.lblPendingIsHidden
} else {
// Change was applied
self.btnChangeIsHidden = false
self.lblConfirmedIsHidden = true
}
Наше соглашение о добавлении "IsHidden" в конец переменной отслеживания также упрощает нам перемещение кода между iOS и WatchOS, поскольку необходимые изменения легко найти и внести.