• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Swift]键盘遮挡控件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10653037.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

键盘遮挡控件:

 1  super.viewDidLoad(){
 2      // Do any additional setup after loading the view, typically from a nib.
 3      //监听键盘弹出通知
 4      NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillShow(_:)), name:UIResponder.keyboardWillShowNotification, object: nil)
 5      //监听键盘隐藏通知
 6      NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillHide(_:)), name:UIResponder.keyboardWillHideNotification, object: nil)
 7  }
 8 
 9 //键盘显示
10 @objc func keyboardWillShow(_ notification: Notification) {
11     let userInfo = (notification as NSNotification).userInfo!
12     //键盘尺寸
13     let keyboardSize = (userInfo[UIResponder.keyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
14     //keyboardSize.height
15     //keyboardSize.width
16     
17 }
18 
19 //键盘隐藏
20 @objc func keyboardWillHide(_ notification: Notification) {
21     //还原控件位置
22     
23 }

tableView 所在的视图控制器是 UITableViewController ,则不需要特别处理即可放心使用,系统会自动处理键盘遮挡问题。

tableView 所在的视图控制器是 UIViewController,这里有两种办法防止键盘遮挡。

  • 方法1:在原来的 UIViewController 内部再添加一层 UITableViewController
 1 import UIKit
 2  
 3 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
 4      
 5     var tableView:UITableView?
 6      
 7     override func loadView() {
 8         super.loadView()
 9     }
10      
11     override func viewDidLoad() {
12         super.viewDidLoad()
13          
14         //创建表视图
15         self.tableView = UITableView(frame: self.view.frame, style:.plain)
16         self.tableView!.delegate = self
17         self.tableView!.dataSource = self
18         //创建一个重用的单元格
19         self.tableView!.register(MyTextFieldCell.self, forCellReuseIdentifier: "tableCell")
20         self.view.addSubview(self.tableView!)
21          
22         //添加一个UITableViewController
23         let tableVC = UITableViewController.init(style: .plain)
24         tableVC.tableView = self.tableView
25         self.addChildViewController(tableVC)
26     }
27      
28     //返回表格行数(也就是返回控件数)
29     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
30         return 20
31     }
32      
33     //创建各单元显示内容(创建参数indexPath指定的单元)
34     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
35         -> UITableViewCell {
36             //创建一个重用的单元格
37             let cell = tableView
38                 .dequeueReusableCell(withIdentifier: "tableCell", for: indexPath)
39                 as! MyTextFieldCell
40              
41             cell.label.text = "条目\(indexPath.row)"
42             return cell
43     }
44  
45     override func didReceiveMemoryWarning() {
46         super.didReceiveMemoryWarning()
47     }
48 }
  • 方法2:监听键盘通知,在键盘出现或消失的时候修改tableView 的 contentInset 和 scrollIndicatorInsets
 1 import UIKit
 2  
 3 class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
 4      
 5     var tableView:UITableView?
 6      
 7     override func loadView() {
 8         super.loadView()
 9     }
10      
11     override func viewDidLoad() {
12         super.viewDidLoad()
13          
14         //创建表视图
15         self.tableView = UITableView(frame: self.view.frame, style:.plain)
16         self.tableView!.delegate = self
17         self.tableView!.dataSource = self
18         //创建一个重用的单元格
19         self.tableView!.register(MyTextFieldCell.self, forCellReuseIdentifier: "tableCell")
20         self.view.addSubview(self.tableView!)
21          
22         //监听键盘弹出通知
23         NotificationCenter.default
24             .addObserver(self,selector: #selector(keyboardWillShow(_:)),
25                          name: NSNotification.Name.UIKeyboardWillShow, object: nil)
26         //监听键盘隐藏通知
27         NotificationCenter.default
28             .addObserver(self,selector: #selector(keyboardWillHide(_:)),
29                          name: NSNotification.Name.UIKeyboardWillHide, object: nil)
30     }
31      
32     //返回表格行数(也就是返回控件数)
33     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
34         return 20
35     }
36      
37     //创建各单元显示内容(创建参数indexPath指定的单元)
38     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
39         -> UITableViewCell {
40             //创建一个重用的单元格
41             let cell = tableView
42                 .dequeueReusableCell(withIdentifier: "tableCell", for: indexPath)
43                 as! MyTextFieldCell
44              
45             cell.label.text = "条目\(indexPath.row)"
46             return cell
47     }
48      
49     // 键盘显示
50     func keyboardWillShow(_ notification: Notification) {
51         let userInfo = (notification as NSNotification).userInfo!
52         //键盘尺寸
53         let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey]
54             as! NSValue).cgRectValue
55         var contentInsets:UIEdgeInsets
56         //判断是横屏还是竖屏
57         let statusBarOrientation = UIApplication.shared.statusBarOrientation
58         if UIInterfaceOrientationIsPortrait(statusBarOrientation) {
59             contentInsets = UIEdgeInsetsMake(64.0, 0.0, (keyboardSize.height), 0.0);
60         } else {
61             contentInsets = UIEdgeInsetsMake(64.0, 0.0, (keyboardSize.width), 0.0);
62         }
63         //tableview的contentview的底部大小
64         self.tableView!.contentInset = contentInsets;
65         self.tableView!.scrollIndicatorInsets = contentInsets;
66     }
67      
68     // 键盘隐藏
69     func keyboardWillHide(_ notification: Notification) {
70         //还原tableview的contentview大小
71         let contentInsets:UIEdgeInsets = UIEdgeInsetsMake(64.0, 0.0, 0, 0.0);
72         self.tableView!.contentInset = contentInsets
73         self.tableView!.scrollIndicatorInsets = contentInsets
74     }
75      
76     override func didReceiveMemoryWarning() {
77         super.didReceiveMemoryWarning()
78     }
79 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode267.回文全排列II$PalindromePermutationII发布时间:2022-07-13
下一篇:
swiftsomeObject==nil如何实现发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap