Ios WatchKit中WKInterfaceButton的隐藏状态

Ios WatchKit中WKInterfaceButton的隐藏状态,ios,swift,watchos-2,Ios,Swift,Watchos 2,有没有办法检查WatchKit中WKInterfaceButton的当前隐藏状态?看起来您无法这样做。但您可以使用state存储自己的变量并使用它 在下面,您可以检查按钮父类的定义 public class WKInterfaceObject : NSObject { public func setHidden(hidden: Bool) public func setAlpha(alpha: CGFloat) @available(watchOS 2.0, *)

有没有办法检查WatchKit中WKInterfaceButton的当前隐藏状态?

看起来您无法这样做。但您可以使用state存储自己的变量并使用它

在下面,您可以检查按钮父类的定义

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
}

WKInterfaceButton
类从
WKInterfaceObject
类继承了一个名为“可用于显示/隐藏按钮”的方法,并且可以使用辅助变量以编程方式设置
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)
   }
}
当您想知道按钮是否隐藏/显示时,只需检查变量
buttonishiden


我希望这对您有所帮助。

正如前面的回答所述,您必须维护自己的变量,以跟踪组、标签、按钮等是否隐藏。一种简单而优雅的方法是使用属性观察者声明跟踪变量,如下所示:

@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之间移动代码,因为所需的更改很容易找到和进行。

谢谢!我试试看。