• Swift Code snippet

    2020. 11. 6.

    by. dundin

    반응형

    Remocle 개발 하면서 간단한 문제 이지만 매번 찾기 귀찮았던 코드 snippet을 정리했다. 

     

    UIKit 관련 

    1. textInput 이외의 영역을 클릭 했을 때 키보드가 내려가도록 하기 

    override func viewDidLoad() {
    	let tapGesture = UITapGestureRecognizer(
        		target: self, 
        		action: #selector(self.dismissKeyboard (_:)))
    	self.view.addGestureRecognizer(tapGesture)
    }
    
    @objc func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    	aTextField.resignFirstResponder()
    }

     

    다만 위처럼 처리할 경우 self.view 하위에 다른 클릭 이벤트를 받아야 하는 view가 있을때 event가  GestureRecognizer 에서 처리가 되어버리고 View에게 touch event가 넘어가지 않는다. touch event를 view로 넘겨야 할 필요가 있을 때 sender.cancelsTouchesInView = false 로 설정해 주면 된다. 

    override func viewDidLoad {
    	let tapGesture = UITapGestureRecognizer(
    		target: self,
    		action: #selector(dismissKeyboard(_:)))
    	view.addGestureRecognizer(tapGesture)
    }
    
    @objc func dismissKeyboard(_ sender: UITapGestureRecognizer) {
    	if sender.state == .ended {
    		editTitleView.resignFirstResponder()
    	}
    	// A Boolean value affecting 
    	// whether touches are delivered to a view when a gesture is recognized.
    	sender.cancelsTouchesInView = false
    }

     

     

    2. TableView 하단에 비어있는 cell이 노출되는 것 숨기기 

    FooterView에 빈 view를 하나 추가해 주면 된다. 

    tableView.tableFooterView = UIView()

     

    3. TableView의 separator 를 숨기는 방법 

    tableView.separatorStyle = .none
    tableView.separatorColor = .clear

     

     

    4. UIPageView 의 child view controller 사이즈를 조정하는 법 

    아래처럼 할 수 있지만 view.subview[0] 이 언제까지 동작할지 알수 없으므로 추천하지 않는다. 

    override func viewDidLayoutSubviews() {
    	super.viewDidLayoutSubviews()
    	let scrollView = view.subviews[0] as UIView
    	scrollView.frame = CGRect(x: scrollView.frame.origin.x,
    		y: scrollView.frame.origin.y,
    		width: scrollView.frame.size.width,
    		height: scrollView.frame.size.height - 64)
    }

     

    5. UI버튼의 클릭 영역 넓혀주기 

    생각보다 되게 자주 쓰게되는 코드로, 버튼 클릭이 잘 안될 때 아래처럼 클래스 하나 새로 만들어 주면 편하다. 

    class CustomButton: UIButton {
        override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
            return bounds.insetBy(dx: -10, dy: -10).contains(point)
        }
    }
    
    반응형

    댓글