Скрытый статус 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, поскольку необходимые изменения легко найти и внести.

Другие вопросы по тегам