专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
微博整合照片选择器
- 将
照片选择器
工程中的PhotoSelector
文件夹拖入到微博项目中 - 在
HMComposeViewController
中懒加载照片选择控制器
photoSelectorVC
/// 照片选择控制器 private lazy var photoSelectorVC: HMComposeViewController = HMComposeViewController()
定义
setupPhotoSelectorView
方法准备照片选择器视图
private func setupPhotoSelectorView() { let photoSelectorView: UIView = photoSelectorVC.view self.view.addSubview(photoSelectorView) // 设置约束 photoSelectorView.translatesAutoresizingMaskIntoConstraints = false let viewDict = ["psv" : photoSelectorView] // 左右和父控件重合 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[psv]-0-|", options: [], metrics: nil, views: viewDict)) // 底部和父控件底部重合 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[psv]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewDict)) // 高度等于父控件高度0.6 view.addConstraint(NSLayoutConstraint(item: photoSelectorView, attribute: .height, relatedBy: .equal, toItem: view, attribute: .height, multiplier: 0.6, constant: 0)) }
- 调用
setupPhotoSelectorView
- 发现
toolBar
被照片选择器
视图挡住了 将照片选择器的
view
添加到toolBar
下方self.view.insertSubview(photoSelectorView, belowSubview: toolBar)
点击加号按钮选择一张图片,发现
照片选择控制器
不见了,控制台出现:Presenting view controllers on detached view controllers is discouraged
- 将
photoSelectorVC
添加为当前控制器的子控制器
,解决问题self.addChildViewController(photoSelectorVC)
发现一进入
撰写微博
界面,照片选择器就显示出来.需要先隐藏,等用户点击选择图片时再显示出来- 在
HMComposeViewController
定义照片选择器视图底部约束
属性/// 照片选择器视图底部约束 private var photoSelectorViewBottomCons: NSLayoutConstraint?
修改
setupPhotoSelectorView
方法中照片选择视图顶部
在父控件底部
private func setupPhotoSelectorView() { let photoSelectorView: UIView = photoSelectorVC.view self.view.insertSubview(photoSelectorView, belowSubview: toolBar) self.addChildViewController(photoSelectorVC) // 设置约束 photoSelectorView.translatesAutoresizingMaskIntoConstraints = false let viewDict = ["psv" : photoSelectorView] // 左右和父控件重合 view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[psv]-0-|", options: [], metrics: nil, views: viewDict)) // 底部和父控件底部重合 let height = UIScreen.height * 0.6 photoSelectorViewBottomCons = NSLayoutConstraint(item: photoSelectorView, attribute: .bottom, relatedBy: .equal, toItem: self.view, attribute: .bottom, multiplier: 1, constant: height) view.addConstraint(photoSelectorViewBottomCons!) // 高度等于父控件高度0.6 view.addConstraint(NSLayoutConstraint(item: photoSelectorView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: height)) }
在选择照片方法
picture
中,将选择照片视图显示出来,将键盘隐藏掉// MARK: - toolBar item 点击事件 /// 点击选择照片,弹出选择照片视图 func picture() { // 显示 照片选择器 self.photoSelectorViewBottomCons?.constant = 0 // 隐藏键盘 textView.resignFirstResponder() UIView.animate(withDuration: 0.25) { () -> Void in self.view.layoutIfNeeded() } }
在
viewDidAppear
方法里面判断如果选择照片视图正在显示,就不呼出键盘override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if photoSelectorViewBottomCons?.constant != 0 { // 主动弹出键盘 textView.becomeFirstResponder() } }
- 在