ios

트러블슈팅

UITextField secureTextEntry 설정시 키체인 영역 안나오게 하기

로그인 기능을 구현하던 중, 키보드 레이아웃 관련 이슈가 발생했다. 😇 문제 상황과 원인 비밀번호 TextField의 보안을 위해 isSecureTextEntry 속성을 true로 지정해주었는데, 텍스트 필드를 이동할때마다 화면이 요동치는 현상이 발생하였다. 현재 뷰의 바텀 레이아웃을 KeyboardLayout에 맞춰줬는데, 키보드 위에 생기는 키체인 패스워드 영역 때문에 발생한 것. 키보드 레이아웃이 키체인 영역이 생길때마다 그에 맞게 늘어나게 되고, FirstResponder인 텍스트필드가 바뀔때마다 키체인 영역의 노출 여부도 바뀐다. 따라서 화면이 요동치는 것처럼 보이는 것이다. 한편 키체인 영역은 텍스트필드가 isSecureTextEntry == true 일때 등장하며, 1) 키체인에 저장된 암호..

트러블슈팅

CollectionView 페이징시 스크롤 멈춤현상 해결하기(feat. Activity Indicator, RefreshControl)

😭 겪은 문제 API 페이징이 적용된 CollectionView에서, 하단으로 빠르게 스크롤시 스크롤이 멈추는 현상을 겪게 되었다. 정확히는 CollectionView Prefetching을 통해 새로운 데이터를 받아오고, 컬렉션뷰를 reload하는 시점에 스크롤이 멈추었다. 😇 원인 컬렉션뷰를 새로고침할때 사용하던 refreshControl을 네트워크 통신의 로딩으로 같이 사용해서 발생한 문제였다. 😭 private lazy var refreshControl: UIRefreshControl = { let refreshControl = UIRefreshControl() refreshControl.addTarget( self, action: #selector(viewControllerDidRefresh(_..

SeSAC

8.24 ~ 8.25 TIL(SeSAC iOS 3기)

Generic 타입에 유연하게 대응하기 위한 요소. 제네릭으로 구현한 타입과 기능은 재사용하기 쉽고 코드의 중복도 줄일 수 있기 때문에 깔끔하고 추상적인 표현이 가능. T: Type Parameters로 플레이스 홀더와 같은 역할을 함. 타입의 종류는 알려주지 않지만 특정한 타입이라는 것은 알려줌. T가 아닌 다른 문자열을 작성해도 되지만, 일반적으로는 UpperCased 또는 T, U 등을 사용함. 🔥 만약 함수를 오버로딩하는데 제네릭을 사용한 경우, 제네릭으로 구현한 함수보다 타입이 명확한 함수가 우선순위가 더 높다. 🔥 프로토콜에서 제네릭을 사용하려면 associated type 을 사용해야 한다. protocol GenericExample { associatedtype T var variable:..

SeSAC

8.23 TIL(SeSAC iOS 3기), MapKit + frozen Enumeration

MapKit MKMapView를 활용한 맵뷰 구현하기 1. import MapKit 2. MKMapView 인스턴스 생성 3. MKMapView의 region과 annotation 설정 center: 맵뷰의 중심이 되는 좌표. latitudinalMeters, longitudinalMeters: 축적. removeAnnotations([Annotation]): 맵뷰의 모든 Annotation을 삭제. extension MapViewController { func configureMapView() { if let coordinate = LocationManager.shared.currenCoordinate { let region = MKCoordinateRegion( center: coordinate, l..

SeSAC

8.21 ~ 8.22 TIL(SeSAC iOS 3기)

IBInspectable과 IBDesignable IBInspectable Interface Builder에 해당 값의 정보를 보여줌 final class CustomButton: UIButton { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue } } } IBDesignable 컴파일 타임에 InterfaceBuilder에서 설정한 속성이 스토리보드에 반영 import UIKit @IBDesignable final class CustomButton: UIButton { @IBInspectable var cornerRadius: CGFloat { ge..

SeSAC

8.14 ~ 8.18 TIL

1. Enum과 Stored Property Enums must not contain storde properties 열거형에서 저장 프로퍼티를 선언할 경우 다음과 같은 에러가 발생한다. 열거형은 컴파일 타임에 로드되므로 인스턴스를 생성할 수 없기 때문에, 저장 프로퍼티는 열거형 내에서 선언할 수 없다. 연산 프로퍼티는 값을 저장하지 않으므로 열거형 내에서 선언이 가능하다. 인스턴스 연산 프로퍼티는 인스턴스 프로퍼티만, 타입 연산 프로퍼티는 타입 프로퍼티만 사용이 가능하다. enum AAA: String, CaseIterable { static let baseURL = "https://www.naver.com" case aa case bb case cc // test: 인스턴스 연산 프로퍼티 -> 값을 ..

SeSAC

8.7 ~ 8.11 TIL

1. overriding vs overloading - overriding: 서브 클래스에서 슈퍼 클래스의 메서드, 프로퍼티, 서브스크립트를 재정의 하는 것. - overloading: 매개변수, 반환 타입의 차이로 동일한 이름의 함수를 구분하는 것, 동일한 이름의 함수를 중복 선언하는 것. 2. URL의 구조 http://news.naver.com:80/article/3234234?lang=ko&page=1 scheme http:// 네트워크 통신에 사용할 프로토콜 http, https, ftp 등 host news.naver.com port - :80 path /article/3234234 query string ?lang=ko&page=1 URL 허용 문자 URL에서는 기본적으로 ASCII 코드 값..

iOS

TextField의 복사/붙여넣기 기능 막기(feat. canPerformAction)

보통 모바일에서 화면이나 텍스트를 꾹 누르면 복사 / 붙여넣기 등의 기능이 있는 메뉴 바가 나오는데, 이를 Edit Menu라고 한다. Edit Menu Edit menus | Apple Developer Documentation An edit menu lets people make changes to selected content in the current view, in addition to offering related commands like Copy, Select, Translate, and Look Up. developer.apple.com Edit menu를 통해 사용자는 선택된 컨텐츠로부터 복사, 붙여넣기, 번역, 검색 등을 수행할 수 있다. 시스템이 제공하는 Edit menu 기능들은 U..

트러블슈팅

Navigation Bar의 SearchBar에서 키보드 내리기(feat. resignFirstResponder)

🔥 구현할 기능 🔥 검색어 입력 중, 화면을 터치하거나 리턴키를 입력했을때 키보드를 내리기 ❌ view.endEditing(true) ❌ 그동안 TextField에 입력중인 상황에서, view.endEditing(true)를 호출하여 키보드를 내릴 수 있었다. 검색창 기능을 구현하던 중, 기존에 처리하던 방법대로 필요한 시점에view.endEditing(true)을 호출하면 키보드를 내릴 수 있을 줄 알았다,, private lazy var searchBar: UISearchBar = { let searchBar = UISearchBar() searchBar.placeholder = "제목을 입력하세요." searchBar.searchTextField.addTarget( self, action: #sel..

SeSAC

7.31 ~ 8.4 TIL

1. XIB(XML Interface Builder) 많이 사용되는 UI, 디자인은 xib 파일로 분리해서 사용하곤 함. xib로 생성한 Cell은 테이블뷰(컬렉션뷰)에 register 하는 과정이 필요하다. func configureUI() { let nib = UINib(nibName: SearchTableViewCell.identifier, bundle: nil) tableView.register(nib, forCellReuseIdentifier: SearchTableViewCell.identifier) tableView.dataSource = self tableView.delegate = self ... } xib를 컴파일하면 nib으로 변환되기 때문에, nib 파일을 등록하는 것. UINib은 ..

예스코치
'ios' 태그의 글 목록