본문 바로가기
728x90

전체 글228

UINavigationViewController (with. Coordinator Pattern) 지저분한 viewController를 정리해보자 UINavigationController를 좀 더 관리하기 쉽고 재사용하기 쉽게하려면 Coordinator 패턴을 이용하면 된다. 한 곳에서 viewController들이 push되고 pop되는 등의 관리를 하고, 사용하는 곳에서는 관리클래스의 함수 하나만 호출해다 쓰면 된다. 기존의 방식은 let vc = self.storyboardinstantiateViewController(withIdentifier: "id") as! someViewController self.navigationController.pushViewController(vc, animated: true) 이렇게 매번 Avc가 Bvc를 알아야 했다. 이는 객체간 결합도가 높아지게 하는 방식.. 2023. 3. 2.
TableView 기본적인 테이블뷰 구현 방법 RxSwift에서는 옵저버블과 테이블뷰를 바인딩 하는 방식으로 데이터를 표시해주기 때문데 테이블뷰의 datasorce와 delegate를 연결해줄 필요가 없다. import UIKit import RxSwift import RxCocoa class MyTableViewViewController: UIViewController { @IBOutlet weak var table: UITableView! let priceFormatter: NumberFormatter = { let f = NumberFormatter() f.numberStyle = NumberFormatter.Style.currency f.locale = Locale(identifier: "Ko_kr") return.. 2023. 3. 2.
distinctUntilChanged(compare: ) let numbers = [1, 1, 2, 4, 4, 3, 5, 7, 1] Observable.from(numbers) .distinctUntilChanged { !$0.isMultiple(of: 2) && !$1.isMultiple(of: 2) } .subscribe { print($0) } .disposed(by: disposeBag) next(1) next(2) next(4) next(4) next(3) completed 과정 1 -> 1 1 1 true true 1 2 true false -> 2 2 4 false false -> 4 4 4 false false -> 4 4 3 false true -> 3 3 5 true true 3 7 true true 3 1 true true 1. 첫번째 값은.. 2023. 2. 20.
프로그래머스: 스택/큐 - 올바른 괄호 https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 fal.. 2023. 2. 16.
네이버 지도 API * 주의 사항 네이버 지도 API 사용시 메모리 해제가 되지 않는 문제가 있으니 주의 필요! 마커 위 정보창 기본 NMFInfoWindow *infoWindow = [NMFInfoWindow new]; NMFInfoWindowDefaultTextSource *dataSource = [NMFInfoWindowDefaultTextSource dataSource]; infoWindow.dataSource = dataSource; // 내가 생성해둔 마커 사용 NMFMarker * marker = [NMFMarker new]; if (marker.infoWindow == nil) { // infoWindow를 marker에 넣어 open [infoWindow openWithMarker:marker]; } els.. 2023. 2. 15.
keyboard 높이 텍스트필드나 텍스트뷰 같은 사용자의 입력이 필요한 컴포넌트 사용시 키보드를 이용해서 뷰의 높이 또는 위치를 조정 해주어야 할 때가 있다. NSNotificationCenter에 키보드 옵저버를 등록해주고, 옵저버의 selector 함수에서 파라미터로 NSNotification을 설정해주면 userInfo를 통해 키보드의 높이 값을 얻을 수 있는데 이때 사용되는 key에 따라 값을 다르게 얻을 수 있다. UIKeyboardFrameEndUserInfoKey vs. UIKeyboardFrameBeginUserInfoKey 둘 다 키보드의 높이를 받아오지만 처음 로드 시킬 때와 다시 로드 시킬 때 값이 다르게 나온다. // 최초 로드 UIKeyboardFrameEndUserInfoKey ==> NSRect: .. 2023. 2. 1.
URL Scheme 다른 앱 또는 웹페이지 연결 수단으로 URL Scheme을 통해 다른 앱의 실행을 요청하거나 간단한 데이터를 전달 할 수 있다. 1. URL Scheme 문자열을 통해 URL 인스턴스 생성 NSString * url = ["URL Scheme url 입력" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 2. UIApplication의 canOpenURL 메서드를 통해 URL Scheme의 유효성 확인 [[UIApplication sharedApplication] canOpenURL:"URL입력"]; 3. 유효한 URL Scheme으로 확인된 경우 openURL 메서드 호출 [[UIApplication sharedApplication].. 2023. 1. 26.
present된 ViewController에 push 현재 위치한 VC에서 새로운 VC를 present로 보여줄 경우 present된 VC는 navigationController에 종속되어 있지 않기 때문에 또 다른 VC를 push하여 보여 줄 수 없다. 그래서 새로운 navigationController의 rootVC를 만들어 주어야 한다. 1. navigatonController의 rootViewController가 될 = present 될 viewController 설정 @IBAction func policy(_ sender: UIButton) { // present될 policyVC guard let policy = self.storyboard?.instantiateViewController(withIdentifier: StoryboardName.p.. 2023. 1. 26.
Expandable tableView Cell(셀 확장) 셀을 누르면 아래로 상세 내용이 펼쳐지는 UI를 만들 때는 상세 내용을 hidden 시켰다가 셀이 눌리면 보여주는 형식으로 구현하면 된다 1. 셀을 눌렀을 때 보여줄 view를 'myView.isHidden = true' 로 만든다. 2. 셀이 눌리면 myView의 isHidden 상태를 반전 시켜주고, 해당 셀을 reload시켜준다. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { myView.isHidden = !myView.isHidden tableView.reloadRows(at: [IndexPath(row: indexPath.row, section: 0)], with: .automatic) } 3. 셀.. 2023. 1. 26.