gpt4 book ai didi

ios - keyboardWillShow 如何在 Swift iOS 中仅应用于 1 个 textView

转载 作者:行者123 更新时间:2023-11-28 08:48:26 25 4
gpt4 key购买 nike

我们有一个看起来像这样的应用程序:

App here

我们在 View 的顶部和底部都有 UITextViews,我一直在寻求帮助,以便在 keyboard 出现时向上移动屏幕。

它实际上工作得很好,但我想知道如何只将它应用于屏幕底部的 UITextView (textViewInteriorDos),它之前正在触摸键盘.如何在这个方法中正确应用 if/else 语句??

顶部的 UITextView 没有被键盘覆盖,所以我们不需要它。

class viewControllerCuatro: UIViewController, UITextViewDelegate {

@IBOutlet weak var textViewInteriorUno: UITextView!
@IBOutlet weak var textViewInteriorDos: UITextView!

override func viewDidLoad() {


self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Atrás", style: UIBarButtonItemStyle.Plain, target: nil, action: nil)


**NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: self.view.window)
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: self.view.window)**




}


func keyboardWillShow(sender: NSNotification)
{
// 1
let userInfo: [NSObject : AnyObject] = sender.userInfo!
// 2
let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
let offset: CGSize = userInfo[UIKeyboardFrameEndUserInfoKey]!.CGRectValue.size
// 3
if keyboardSize.height == offset.height {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y -= keyboardSize.height
})
} else {
UIView.animateWithDuration(0.1, animations: { () -> Void in
self.view.frame.origin.y += keyboardSize.height - offset.height
})
}


}
func keyboardWillHide(sender: NSNotification) {
let userInfo: [NSObject : AnyObject] = sender.userInfo!
let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size
self.view.frame.origin.y += keyboardSize.height
}
override func viewWillDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: self.view.window)
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: self.view.window)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

if textViewInteriorUno.text == "" || textViewInteriorUno.text.isEmpty == true || textViewInteriorDos.text == "" || textViewInteriorDos.text.isEmpty == true {


textViewInteriorUno.resignFirstResponder()


textViewInteriorDos.resignFirstResponder()
}
else{

self.textViewInteriorUno.resignFirstResponder()

self.textViewInteriorDos.resignFirstResponder()
}
}

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool{

var shouldReplace = true // For most cases, return true, only modify if we have a special case

// If the textView is 'textViewInteriorUno'
if textView.isEqual(textViewInteriorUno) {

let newLength = textViewInteriorUno.text.utf16.count + text.utf16.count - range.length
shouldReplace = newLength <= 12 // will be true if the length is <= 12

}

else if textView.isEqual(textViewInteriorDos) {

let newLength = textViewInteriorDos.text.utf16.count + text.utf16.count - range.length
shouldReplace = newLength < 13 // Will be true if the length > 6


}

return shouldReplace
}

最佳答案

我认为它可以帮助你如下

准备:

@IBOutlet weak var textSkillSearch: UITextView!

@IBOutlet weak var textWillSearch: UITextView!
  1. 标记添加观察者的通知

覆盖函数 viewDidLoad() { super.viewDidLoad()

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MainViewController.textViewDidBeginEditing(_:)), name:UIKeyboardWillShowNotification, object: nil);
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MainViewController.keyboardWillHide(_:)), name:UIKeyboardWillHideNotification, object: nil);

self.textWillSearch.delegate = self
self.textSkillSearch.delegate = self

  1. 键盘事件和 TextView 事件。

////

func textViewDidBeginEditing(textView: UITextView) {
if textView == textWillSearch {
self.view.frame.origin.y = -130
}
}

func textViewDidEndEditing(textView: UITextView) {
self.view.frame.origin.y = 0
}

func keyboardWillHide(sender: NSNotification) {
self.view.frame.origin.y = 0
}

deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}

// called when 'return' key pressed. return NO to ignore.
func textViewShouldEndEditing(textView: UITextView) -> Bool {
textView.resignFirstResponder()
return true
}

// called when users tap out of textfield
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}

关于ios - keyboardWillShow 如何在 Swift iOS 中仅应用于 1 个 textView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34673880/

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