전체 글
-
[UIKit] TableViewCell 내부의 button이 작동하지 않을 때iOS/UIKit 2022. 1. 13. 04:19
Button을 갖는 CustomCell을 만들었을 때, 계속해서 Button의 클릭이벤트가 발생하지 않는 오류를 만났다. 기능적인 오류가 아닌 View 계층적인 문제였다. 아래를 보면 빨간색 박스에 포함된 객체들이 버튼이다. 초록색 박스를 보면 버튼 위에 뷰가 하나씩 더 있는것을 볼 수 있다. 초록색 박스의 정체는 TableViewCell.contentView이다. Cell.addSubview()를 하게되면, Cell과 ContentView사이에 객체가 들어가기 때문에 상호작용이 불가능하다. 따라서 ContentView위에 객체를 추가해주어야 상호작용이 가능하다. TableViewCell.contentView.addSubView()로 contentView위에 객체를 추가해주니 버튼도 잘 눌린다.
-
[RxSwift] merge로 결과가 같은 Observable 묶기카테고리 없음 2022. 1. 12. 02:34
글 쓰기 상태일 때, 글 수정 상태일 때 오른쪽 상단의 완료버튼을 누르는 이벤트와 왼쪽 X버튼을 누르는 이벤트가 dismiss로 동일했습니다. 즉, create일때는 서버에 Post를 보낸 뒤, 오류가 없으면 dismiss하고 update일때는 서버에 Put을 보낸 뒤, 오류가 없으면 dismiss하고 X버튼을 누르면 항상 dismiss해주어야 했습니다. 이 경우 모든 Observable stream을 하나로 만들어주어서, 하나의 Observable만 구독한다면 코드의 반복을 줄일 수 있을 것이라고 생각했습니다. 그래서 Input 대비 Output은 result라는 Observable 단 한 개만을 만든 뒤, result를 나머지 stream의 merge로 만들었습니다. 이렇게 하면 result만 구독해..
-
[TIL] 참조와 캡쳐iOS/Swift 2022. 1. 11. 18:21
일단 weak, unowned 키워드에 대해 배우고 캡쳐까지 확장했다. 참조 카운트, ARC에 대한 키워드인데, 이것을 이해하려면 참조 카운트에 대한 이해가 필요하다. 매우 장황한 주제지만, 하나씩 차근차근 공부해보며 작성해봐야겠다. 참조카운트(Reference Count) 간단하게 객체가 참조되고있는 개수를 표현한 용어이다. 객체를 생성하기만 해도 참조가 생기기 때문에 기본적으로 RC는 1이라고 볼 수 있다. RC가 0이라는 것은 더이상 아무도 그 객체를 필요로하지 않는다는 뜻이기 때문에 메모리 해제를 해 주어야 한다. 이런 상황에서 메모리 해제를 OBJ-C에서는 직접 해줬다고 하는데,, C++을 사용하는 느낌이였을 것 같다. 직접 메모리 관리를 해주는 것을 MRC(Manual Reference Cou..
-
[TIL] COW(Copy on Write)iOS/Swift 2022. 1. 10. 18:58
COW(Copy On Write)는 말 그대로 "값을 기록할 때 복사가 일어난다"는 뜻이다. 찾아보니 Memory Management분야에서 Optimization기술 중 하나로 쓰이고 있다고 한다. Swift에서도 Optimization기술로 쓰이고 있다. COW는 CollectionType에서 적용이 된다. CollectionType은 Struct로 구성되어있기 때문에 ValueType이다 아래는 두 변수를 따로 선언해 주었을 때 발생하는 메모리 상황이다. let a = [1...30] let b = [1...30] ValueType에서는 대입연산자를 사용할 때 값복사가 일어난다. 하지만 COW가 적용됨으로 인해 메모리주소가 복사되는 현상이 발생한다. let a = [1...30] let b = a ..
-
[Xcode Behavior] Xcode에서 터미널명령어 바로 실행하기개발 환경/Xcode 2022. 1. 10. 00:04
Xcode로 작업하다가 중간에 터미널을 열어야 하는 경우가 종종 있습니다. CocoaPod Install CocoaPod Update 등등... 그럴 때, 해당 프로젝트의 경로로 한번에 찾아들어가기 굉장히 귀찮습니다. script를 등록함으로써 이런 번거로움들을 한번에 해결할 수 있습니다. 아래 코드는 순서대로 open_terminal, pod init, pod update 입니다. 원하는 코드를 복사해 파일로 만들어주세요. 코드 적용 왼쪽아래 +버튼을 눌러서 이름을 지어준 후, 오른쪽 표시된 곳에서 알맞는 스크립트를 불러오면 됩니다. 자세히 보면 단축키도 지정할 수 있기 때문에 원하는 단축키로 더 생산성을 높일 수 있습니다. 더 많은 Behaviors 글에서 설명한 간단한 기능 말고도 많은 행동들을 설..
-
커뮤니티 게시판 프로젝트를 마치고 느낀점기타/느낀점 | 회고 2022. 1. 7. 00:57
프로젝트 설명 ⚠️ 해당 프로젝트는 클론 코딩이 아닙니다. API명세와 디자인 가이드을 받아 주도적으로 기획하고 구현한 프로젝트입니다. ⚠️ 21.01.03(월) ~ 21.01.06(목)까지 정해진 기간동안 구현한 프로젝트이고, ⚠️ 21.01.09(월) ~ 21.01.13(목)까지 개인적인 리펙토링 후 피드백을 받았습니다. Auth : 로그인, 회원가입, 비밀번호 변경(API는 구현했지만 View를 구현 못함..) Post : 게시판 형식에서 게시글 조회, 추가 / 상세조회, 수정, 삭제 Comment : 상세조회 페이지에서 댓글에 대해서 추가, 조회, 수정, 삭제 즉 게시판 형식의 CRUD를 모두 구현해봤습니다. Code Base UI MVVM ( 기존 목표였지만, 리펙토링 단계에서 추가 ) URLS..
-
[UIKit] ScrollView 안에 TableView 넣기iOS/UIKit 2022. 1. 5. 19:40
필수 요소 코드로 구현할 때에는 scrollView의 모든 edge에 대한 constraint가 존재, scrollView안에 contentView가 존재 ( 이번 경우에는 StackView를 사용) contentView의 넓이(스크롤 방향의 수직방향)에 대한 constraint가 존재. tableView의 고유한크기(intrinsicContentSize)를 flexible하게 만들어주어야 함. 참고 https://stackoverflow.com/questions/35028518/how-to-make-uitableview-fit-to-contents-size How to make UITableView fit to content's size I have a UITableView (let's call it ..
-
RxSwift로 리펙토링 맛보기iOS/RxSwift 2022. 1. 3. 16:27
과제중에 다음과 같은 화면을 구현하는것이 있었다. ViewController은 View를 소유하고 있어서, ViewController에서 View의 객체들에 addTarget을 구현해줬다. override func viewDidLoad() { super.viewDidLoad() mainView.startButton.addTarget(self, action: #selector(startButtonTapped), for: .touchUpInside) mainView.fotterLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(loginLabelTapped))) } @objc func startButtonTappe..