当前位置: 首页 > 知识库问答 >
问题:

根据文本视图,当键盘出现时,向上移动屏幕。敏捷的

邢曦
2023-03-14

我尝试过在键盘出现时向上移动屏幕。我成功地做到了,但我需要知道如何仅在单击底部UITextView时滚动视图,而不是顶部TextView,因为键盘只是触摸下面的TextView

应用程序是这样的:

我们的观点

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
}

共有1个答案

常俊爽
2023-03-14

IQKeyboardManager是我的天赐之物!

步骤1:

您所要做的就是从https://github.com/hackiftekhar/IQKeyboardManager下载项目并将IQKeyboardManagerSwift目录从演示项目移动到您的项目。

移动IQKeyboardManagerSwift目录后,确保它位于项目中的正确位置。

第2步:

然后在AppDelegate中。swift,只需在应用程序功能中启用IQKeyboardManager。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
  {

  // This is the only line of code you need to manually add
  // in order for IQKeybaordManager to work. Thats it.
  IQKeyboardManager.sharedManager().enable = true

  return true
  }
}

就这样!现在你的键盘将向上滑动并相应地移动视图。这个框架的创建者的道具,让我们的生活变得更轻松。

 类似资料:
  • 我的视图中有六个UITextFields,我想决定视图是否必须移动。在移动视图之前,如何检查选择了哪个文本字段? 这是我显示键盘和移动视图的代码:

  • 我正在尝试为iPhone构建一个输入屏幕。屏幕有一个进审量字段。它们大多在屏幕顶部,但底部有两个字段。当用户尝试编辑屏幕底部的文本时,键盘会弹出,它会覆盖屏幕。当这种情况发生时,我找到了一个简单的解决方案来向上移动屏幕,但结果是屏幕总是向上移动,当用户尝试编辑那些时,屏幕顶部的字段移动到够不着的地方。 是否有办法使屏幕仅在编辑底部字段时移动? 我使用了我在这里找到的代码:

  • 本文向大家介绍iOS屏幕根据键盘自动变化高度,包括了iOS屏幕根据键盘自动变化高度的使用技巧和注意事项,需要的朋友参考一下 一、效果图 二、代码 ViewController.h ViewController.m 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 所以我有一个带有文本字段的视图,但是文本字段在底部。当我单击键盘时,它会弹出并覆盖文本字段,这是我的问题。我想知道当键盘出现时是否有可能将视图的其余部分向上推?

  • 问题在于,当软键盘出现或消失时,recyclerview几乎向下滚动一整行。 这里有一个直观的例子: 活动的布局使用ChatKit UI库中的MessageInput和MessageList对象,如下所示: 该活动还在清单中设置了 adjustPan: Recyclerviews线性布局管理器设置为垂直,具有反向布局和默认项目animator: 理想情况下,我不想设置键盘侦听器并在每次显示/隐藏键

  • 当我在模拟器的 EditText 中输入文本时,屏幕不会向上移动,因此我看不到我正在输入的内容。 我想附加屏幕截图,但我还没有所需的声誉。 这只是以下代码的问题。 同时,它在同一应用程序的另一个屏幕上运行良好。 工作代码是- 我正在努力找出它为什么不起作用。请帮帮忙!