Skip to content

Commit

Permalink
#3 add BoardSearchView & BoardWriteView
Browse files Browse the repository at this point in the history
  • Loading branch information
JunseokNoh committed Jul 25, 2021
1 parent c87cfbd commit 464e480
Show file tree
Hide file tree
Showing 5 changed files with 314 additions and 18 deletions.
12 changes: 0 additions & 12 deletions KNU_CSE/KNU_CSE/Custom/ExtensionUI/BindingTextField.swift
Original file line number Diff line number Diff line change
Expand Up @@ -175,16 +175,4 @@ extension UITextField{
}
}

extension UIViewController: UITextFieldDelegate{

//touch any space then keyboard shut down
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
self.view.endEditing(true)
}

//if keyboard show up and press return button then keyboard shutdown
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
125 changes: 123 additions & 2 deletions KNU_CSE/KNU_CSE/Main Tab/Board/BoardSearch/BoardSearchView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,140 @@ import UIKit

class BoardSearchView:UIViewController, ViewProtocol{

var scrollView:UIScrollView!{
didSet{
scrollView.alwaysBounceVertical = true
}
}

var textFieldHeight:CGFloat!
var titleField:UITextField!{
didSet{
if let font = titleField.font {
self.textFieldHeight = font.lineHeight + 16
}

let view = UIView(frame: CGRect(x: 0, y: 0, width: self.textFieldHeight, height: self.textFieldHeight))
let imageView = UIImageView()
let image = UIImage(systemName: "magnifyingglass")?.resized(toWidth: self.textFieldHeight*0.6)

titleField.placeholder = "검색어를 입력하세요."
titleField.delegate = self
titleField.addTarget(self, action: #selector(removeKeyBoardAction), for: .editingDidEnd)
titleField.font = UIFont.systemFont(ofSize: 15, weight: .regular)
titleField.backgroundColor = .white.withAlphaComponent(0.4)
titleField.layer.cornerRadius = 10
titleField.textColor = .white

imageView.frame = CGRect(x: self.textFieldHeight*0.2, y: self.textFieldHeight*0.2, width: self.textFieldHeight*0.6, height: self.textFieldHeight*0.6)

imageView.image = image?.withTintColor(.white)
view.addSubview(imageView)

titleField.enablesReturnKeyAutomatically = true // textfield에 text가 있을 때 return key 활성화

titleField.leftView = view
titleField.leftViewMode = .always
titleField.returnKeyType = .search
self.navigationItem.titleView = titleField
}
}

var contentCheck:Bool = false
var rightItemButton:UIBarButtonItem!{
didSet{
rightItemButton.title = "취소"
rightItemButton.style = .plain
rightItemButton.tintColor = .white
rightItemButton.target = self
rightItemButton.action = #selector(removeBoardView)
self.navigationItem.rightBarButtonItem = rightItemButton
}
}

var BoardVC : FreeBoardView!

override func viewWillAppear(_ animated: Bool) {
self.hideBackBtnTitle()
self.setNavigationTitle(title: "")
}

override func viewDidLoad() {
super.viewDidLoad()
self.initUI()
self.addView()
self.setUpConstraints()
}

func initUI() {

self.scrollView = UIScrollView()
self.titleField = UITextField()
self.rightItemButton = UIBarButtonItem()
self.BoardVC = storyboard?.instantiateViewController(withIdentifier: "FreeBoardView") as? FreeBoardView
}

func addView() {

}

func setUpConstraints() {

self.titleField.snp.makeConstraints{ make in
make.width.equalTo(250)
make.height.equalTo(textFieldHeight)
}
}
}

extension BoardSearchView{

func addBoardView(){
self.addChild(BoardVC)
self.view.addSubview(BoardVC.view)
BoardVC.didMove(toParent: self)
BoardVC.view.backgroundColor = .yellow
BoardVC.view.snp.makeConstraints{ make in
make.top.equalTo(self.view.safeAreaLayoutGuide)
make.left.equalTo(self.view.safeAreaLayoutGuide)
make.right.equalTo(self.view.safeAreaLayoutGuide)
make.bottom.equalTo(self.view.safeAreaLayoutGuide)
}
}

@objc func removeBoardView(){
BoardVC.willMove(toParent: nil)
BoardVC.view.removeFromSuperview()
BoardVC.removeFromParent()
titleField.resignFirstResponder()
}

@objc func removeKeyBoardAction(){
NotificationCenter.default.removeObserver(self)
}

func hideBackBtnTitle(){
let backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backBarButtonItem
}

func setNavigationTitle(title:String){
self.navigationItem.title = title
}

}

extension BoardSearchView:UITextFieldDelegate{
//if return key press then keyboard shut down
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField.returnKeyType == .search{
textField.resignFirstResponder()
self.addBoardView()
}
return true
}

func addSearchButtonOnKeyBoard(){
let searchBtn:UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50))
searchBtn.barStyle = .default
}
}

167 changes: 163 additions & 4 deletions KNU_CSE/KNU_CSE/Main Tab/Board/BoardWrite/BoardWriteView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,201 @@ import UIKit

class BoardWriteView:UIViewController, ViewProtocol{

var scrollView:UIScrollView!{
didSet{
scrollView.alwaysBounceVertical = true
}
}

var textFieldHeight:CGFloat!
var titleField:UITextField!{
didSet{
titleField.placeholder = "제목"
titleField.placeholder = "제목을 입력하세요."
titleField.delegate = self
titleField.addTarget(self, action: #selector(removeKeyBoardAction), for: .editingDidEnd)
titleField.font = UIFont.systemFont(ofSize: 15, weight: .regular)
titleField.addTarget(self, action: #selector(setRightItemColor), for: .editingChanged)
if let font = titleField.font {
self.textFieldHeight = font.lineHeight + 20
}
}
}

var borderLine:UIView!{
didSet{
borderLine.layer.borderWidth = 0.3
borderLine.layer.borderColor = UIColor.lightGray.cgColor
}
}

var contentField:UITextView!{

didSet{
contentField.delegate = self
contentField.font = UIFont.systemFont(ofSize: 15, weight: .regular)
contentField.isScrollEnabled = false
}
}

let placeHolderText = "내용을 입력하세요."
var contentPlaceHolder:UILabel!{
didSet{
contentPlaceHolder.text = placeHolderText
contentPlaceHolder.font = contentField.font
contentPlaceHolder.textColor = UIColor.lightGray.withAlphaComponent(0.75)
contentPlaceHolder.isHidden = !contentField.text.isEmpty
}
}

var contentCheck:Bool = false
var rightItemButton:UIBarButtonItem!{
didSet{
rightItemButton.title = "작성하기"
rightItemButton.style = .plain
rightItemButton.tintColor = .white.withAlphaComponent(0.7)
rightItemButton.target = self
rightItemButton.action = #selector(addTapped)
self.navigationItem.rightBarButtonItem = rightItemButton
}
}

override func viewWillAppear(_ animated: Bool) {
self.hideBackBtnTitle()
self.setNavigationTitle(title: "게시물 작성")
}

override func viewDidLoad() {
super.viewDidLoad()
self.initUI()
self.addView()
self.setUpConstraints()
self.setKeyBoardAction()
}

func initUI() {

self.scrollView = UIScrollView()
self.titleField = UITextField()
self.borderLine = UIView()
self.contentField = UITextView()
self.contentPlaceHolder = UILabel()
self.rightItemButton = UIBarButtonItem()
}

func addView() {

self.view.addSubview(scrollView)
_ = [titleField, borderLine, contentField, contentPlaceHolder].map{
self.scrollView.addSubview($0)
}
}

func setUpConstraints() {
let left_margin = 20
let right_margin = -20
let padding = 5

self.scrollView.snp.makeConstraints{ make in
make.top.equalTo(self.view.safeAreaLayoutGuide)
make.left.equalToSuperview()
make.right.equalToSuperview()
make.bottom.equalTo(self.view.safeAreaLayoutGuide)
}

self.titleField.snp.makeConstraints{ make in
make.top.equalToSuperview().offset(10)
make.left.equalTo(self.view.safeAreaLayoutGuide).offset(left_margin+padding)
make.right.equalTo(self.view.safeAreaLayoutGuide).offset(right_margin)
make.height.equalTo(textFieldHeight)
}

self.borderLine.snp.makeConstraints{ make in
make.top.equalTo(self.titleField.snp.bottom).offset(5)
make.left.equalTo(self.view.safeAreaLayoutGuide).offset(left_margin)
make.right.equalTo(self.view.safeAreaLayoutGuide).offset(right_margin)
make.height.equalTo(0.3)
}

self.contentField.snp.makeConstraints{ make in
make.top.equalTo(self.borderLine.snp.bottom).offset(10)
make.left.equalTo(self.view.safeAreaLayoutGuide).offset(left_margin)
make.right.equalTo(self.view.safeAreaLayoutGuide).offset(right_margin)
make.bottom.equalToSuperview()
}

self.contentPlaceHolder.snp.makeConstraints{ make in
make.top.equalTo(self.contentField.snp.top)
make.left.equalToSuperview().offset(left_margin+padding)
make.right.equalToSuperview().offset(right_margin)
make.height.equalTo(contentField.snp.height)
}
}


}

extension BoardWriteView{
@objc func removeKeyBoardAction(){
NotificationCenter.default.removeObserver(self)
}

func setKeyBoardAction(){
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil);

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil);
}

@objc func keyboardWillShow(notification: NSNotification) {
animateWithKeyboard(notification: notification) { (keyboardFrame) in
self.scrollView.snp.updateConstraints{ make in
make.bottom.equalTo(self.view.safeAreaLayoutGuide).offset(-keyboardFrame.height+self.view.safeAreaInsets.bottom-20)
}
}
}

@objc func keyboardWillHide(notification: NSNotification) {
animateWithKeyboard(notification: notification) { (keyboardFrame) in
self.scrollView.snp.updateConstraints{ make in
make.bottom.equalTo(self.view.safeAreaLayoutGuide)
}
}
}

func hideBackBtnTitle(){
let backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backBarButtonItem
}

func setNavigationTitle(title:String){
self.navigationItem.title = title
}

@objc func setRightItemColor(){
if titleField.text != "" && contentField.text != ""{
self.contentCheck = true
rightItemButton.tintColor = .white
}else{
self.contentCheck = false
rightItemButton.tintColor = .white.withAlphaComponent(0.7)
}
}

@objc func addTapped(){
if contentCheck{
print("ok")
}
}
}

extension BoardWriteView:UITextViewDelegate{
func textViewDidChange(_ textView: UITextView) {
self.contentPlaceHolder.isHidden = !textView.text.isEmpty
self.setRightItemColor()
}

}

extension BoardWriteView:UITextFieldDelegate{
//if return key press then keyboard shut down
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
14 changes: 14 additions & 0 deletions KNU_CSE/KNU_CSE/SignIn/SignInView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,17 @@ extension ViewController{
}
}
}

extension ViewController: UITextFieldDelegate{

//touch any space then keyboard shut down
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
self.view.endEditing(true)
}

//if keyboard show up and press return button then keyboard shutdown
public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Loading

0 comments on commit 464e480

Please sign in to comment.