(Swift) AutoLayout을 코드로 설정하는 방법

오토레이아웃 오토레이아웃이 도입되기 이전에도 코코아 및 코코아터치에서는 상위뷰나 윈도가 크기가 변하는 경우에 하위 뷰들의 크기가 그에 따라 어떻게 변할 것인지를 결정해주는 방법이 있었다. 흔히 spring & struts라 불리는 오토리사이징 마스크가 그것이다. 하지만 오토 리사이징 마스크는 한 가지 문제가 있는데, 그것은 오토 리사이징 마스크는 수퍼뷰와 서브뷰 둘 사이의 관계만을 정의하기 때문에 이를 따라 뷰의 크기나 위치가 움직일 때 서브 뷰 간의 레이아웃이 흐트러질 수 있는 가능성이 매우 많다는 것이다. 그리하여 예전에는 화면의 회전이나 키보드가 올라오는 등의 과정이 발생하면[^0-1] 뷰의 크기가 전환되는데

(Swift) Swift의 문자열과 NSRange

NSRange로 서브스트링 얻기 NSRange는 NSString의 서브스트링의 영역을 표시하기 위해 정의된 C 구조체 타입의 데이터 타입이다. NSString은 -substringWithRange:를 통해서 NSRange가 가리키는 범위의 부분열을 얻을 수 있는데, Swift의 String 타입은 당연히 NSRange와 호환되지 않는다. 그럼에도 불구하고 NSRegularExpression등의 클래스를 이용하는 경우, 문자열은 그대로 String 타입이지만, 매치 결과의 범위는 NSRange로 리턴되므로 이 두 타입간의 내용을 이어줄만한 장치가 필요하다. Swift의 문자열의 부분열 범위는 NSRange등의 독립 타입으로 표시할 수 없고, String.Index라는 타입을 이용해서 정의한다. 따라서 해당 문자열 인스턴스의 startIndex 속성으로부터 시작범위의 그 길이값 이후까지의 값을 매

(Swift) UIScrollView

UIScrollView 스크롤뷰는 뷰의 크기보다도 더 큰 콘텐츠를 표시해야할 때 사용되는 UIView의 서브 클래스로 흔히 포토 뷰어 등에 쓰이는 컨트롤이다. 스크롤뷰는 자체적으로 사용자의 터치 제스쳐를 인식하여 콘텐츠를 스크롤해준다. 스크롤 뷰는 내부적으로 표시를 위한 뷰 컴포넌트를 따로 갖고 있지는 않으며, 대신에 contentSize: CGSize라는 프로퍼티를 이용해서 스크롤뷰 자체가 화면에서 표시되는 크기에 대비하여 전체 콘텐츠 사이즈로 사용되는 영역이 얼마인지를 정의하고 이를 통해 어디서 어디까지 스크롤 할 것인지를 결정하게 된다.

Nib 파일로부터 객체를 로딩하기

nib 파일에서 뷰를 가져오기 UIView를 상속받은 커스텀 뷰를 작성할 때, 뷰의 서브 뷰들을 일일이 동적으로 구성하는 것보다 인터페이스 빌더를 통해서 구성하는 것이 더 편한 경우가 있다. 흔히 테이블 뷰의 셀에 쓰이는 뷰가 이런 식으로 구성하기 좋다. 메인 스토리보드와는 별개의 nib 파일에 뷰를 세팅하고 이를 로드하는 과정을 생각해보자.

(Cocoa | Swift ) 테이블 뷰에서 드래그하여 재정렬하기

도전과제 – 테이블 뷰에서 row를 드래그하여 재정렬해보자. 드래그 앤 드롭의 매커니즘과 구현방법에 대해서 살펴보았었는데, 그렇다면 테이블 뷰에서 드래그 앤 드롭으로 데이터의 순서를 임의의 순서대로 바꿀 수 있는가에 대해서 살펴보자.

(Cocoa) NSUserInterfaceValidations – UI 컨트롤의 활성화 여부 결정

NSUserInterfaceValidations 특정한 메뉴 항목이나 버튼, 테이블뷰, 텍스트뷰 및 텍스트 필드등이 특정한 조건에 따라 활성화/비활성화되어야 하는 경우에 이를 처리하는 전략으로는 두 가지 방법이 있다. 특정 조건값이 변경될 때 (변경지점에서, 혹은 옵저빙을 통해서) 관련된 컨트롤의 활성화 여부를 변경해주는 방법 특정 조건값을 계산 프로퍼티로 만든 후, 이를 코코아 바인딩으로 컨트롤의 enabled 키와 연결하는 방법 코코아에서는 이 외에도 컨트롤에 대한 유효성 검사 매커니즘을 별도로 가지고 있다. 컨트롤이 화면에 표시될 때, 해당 컨트롤의 타깃이 NSUserInterfaceValidations 프로토콜을 따르고 있다면 해당 프로토콜의 메소드를 호출하여 자신의 유효성 여부를