gpt4 book ai didi

ios - 从另一个类 BWWalkthrough 调用函数时属性 = nil

转载 作者:行者123 更新时间:2023-11-29 01:08:18 25 4
gpt4 key购买 nike

我正在使用 BWWalkthrough构建一个带有文本字段的欢迎演练。

BWWalkthroughViewController 中有 2 个预构建的 IBOutlet,我附加到我的元素(nextButtonprevButton)。基本上,我在页面中使用文本字段来向他们询问信息。

在我的页面类中:

class WTnameViewController: UIViewController, UITextFieldDelegate, BWWalkthroughPage {

我添加了一个观察者来查看文本字段何时发生变化。

override func viewDidLoad() {
super.viewDidLoad()
// ...
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("textfieldIsNotEmpty:"), name:UITextFieldTextDidChangeNotification, object: textfieldName)
// ...
}

它调用这个函数:

func textfieldIsNotEmpty(notification: NSNotification) {

// BWWalkthroughViewController is the master class.
let nxtBtn = BWWalkthroughViewController()

if textfieldName.text?.isEmpty == true {
// Animate the fade-out of the button
UIView.animateWithDuration(0.4, animations: { () -> Void in
nxtBtn.nextButton?.layer.opacity = 0
}, completion: { finished in
nxtBtn.nextButton?.hidden = true
})

} else if textfieldName.text?.isEmpty == false {
// animate the fade-in of the button in BWWalkthrough
UIView.animateWithDuration(0.4, animations: { () -> Void in
nxtBtn.nextButton?.hidden = false
nxtBtn.nextButton?.layer.opacity = 1
}, completion: { finished in
})

}
}

But the button is a nil.

另外,我在 BWWalkthroughViewController 类的 ViewDidLoad 中添加了一个通知,以更改按钮的位置

NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardNotification:", name: UIKeyboardWillChangeFrameNotification, object: nil)

和功能:

func keyboardNotification(notification: NSNotification) {

// Below we define the animation
let userInfo = notification.userInfo!
let animationDuration = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
let keyboardEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
let convertedKeyboardEndFrame = view.convertRect(keyboardEndFrame, fromView: view.window)
let rawAnimationCurve = (notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! NSNumber).unsignedIntValue << 16
let animationCurve = UIViewAnimationOptions(rawValue: UInt(rawAnimationCurve))

// I change the constraint of the button with the animation
buttonNextBottomConstraint!.constant = CGRectGetMaxY(view.bounds) - CGRectGetMinY(convertedKeyboardEndFrame)
buttonBackBottomConstraint!.constant = CGRectGetMaxY(view.bounds) - CGRectGetMinY(convertedKeyboardEndFrame)
UIView.animateWithDuration(animationDuration, delay: 0.0, options: [.BeginFromCurrentState, animationCurve], animations: {
self.view.layoutIfNeeded()
}, completion: nil)

// Here I check if 'nextButton' is a nil - Debug only
print("keyboard : \(nextButton)")
}

The value of nextButton isn't nil here

我还尝试通过 BWWalkthroughViewController 中的函数直接更改按钮,但它也返回了一个 nil

有人可以解释一下为什么 nextButton 在一个函数中是 nil 而不是另一个函数吗?

编辑:

我在 BWWalkthroughViewController 中创建了以下函数:

public func textfieldChangeButton() {
// Do stuff here when receive a notification about a textfield
UIView.animateWithDuration(0.4, animations: { () -> Void in
self.nextButton?.hidden = false
self.nextButton?.layer.opacity = 1
print("textfieldChangeButton : \(self.nextButton)")
}, completion: { finished in
})
}

当我从实际的 textfieldIsNotEmpty 调用它时,nextButtonnil,当我从 BWWalkthroughViewController 中的另一个函数调用它时 直接,它工作得很好。

最佳答案

此:let nxtBtn = BWWalkthroughViewController() 创建一个新对象。由于它不是屏幕显示的一部分,因此没有加载其 View ,因此也没有填充其导出。

你没有说 how textfieldIsNotEmpty 是如何调用的,但你可能想传递给它一个对现有 BWWalkthroughViewController 的引用,而不是拥有它创建一个空的。

关于ios - 从另一个类 BWWalkthrough 调用函数时属性 = nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com