2013 이전/iOS개발 29

[iOS 개발] UIButton title, image 위치 정리

UIButton을 사용하다 보면 title, image등을 버튼위에 올려서 사용하게 된다. 그런데 이들이 깔끔하게 배치되지 않을때가 많다. UIButton의 titleLabel의 frame을 직접 적용해도 변화가 없을 것이다.그래서 대부분 포기하고 버튼 위에 따로 View를 올리는 경우가 있는데,이럴 경우 버튼 state 마다 위에 올린 뷰를 수동으로 바꿔 주어야 한다.특히, UIControlStateHighlighted 를 처리하려면 소스가 지저분해지고 번거러워 질 수 밖에 없다. 다행히도 이들을 배치할 수 있는 방법은 존재한다.일단 image, title의 Alignment를 정해줄수 있는데 아래와 같이 가능하다. [btn setContentHorizontalAlignment:UIControlCont..

[iPad 개발] PopoverController contentSize 문제

PopoverController 를 사용하다보면 사이즈 때문에 골머리를 썩을 경우가 많을 것이다.일단 가장 평범한 방법은 해당 PopoverController에 들어갈 해당 UIViewController에- (CGSize)contentSizeForViewInPopover { return CGSizeMake(320, 480); } 위 처럼 해당 하는 함수를 override 해주면 리턴하는 사이즈로 PopoverController 사이즈를 조절 해준다.하지만 여기도 문제점이 하나 있다.navigationController를 사용할때 push나 pop을 하게 되면 늘어나기는 하지만 줄어 들지는 않는다.구글링을 통해서 얻게된 방법인데, 일종의 꼼수라고 볼수 있겠다.- (void) forcePopoverSize ..

[iOS 개발] 안정적이고 flexible 한 UITableViewCell UI 구현하기

UITableView 를 이용할때 Cell을 Customize 하여 사용하는 경우가 많을 것이다. 이렇게 사용할때 Cell의 크기에 따라 Cell의 구성요소의 위치와 크기가 다르게 구성하는 경우가 많을 것이다. 하지만 각각의 Cell을 UI사이즈나 위치가 변경할때 마다 각각의 Cell의 위치나 크기를 매번 새로 적용해주게 되면 여러 문제가 발생할 수가 있다. 이때, 해당 Cell의 frame만 가지고 구성요소의 위치를 지정해 주게 되면 여러 문제에 봉착하게 된다. 그래서 Cell을 구성할떄 위치와 크기에 변화가 필요한 것들은 모두 각 UIView에 AutoresizingMask를 적용하여 사용해야 한다. 전체 View가 유기적으로 AutoresizingMask를 적용하지 않아서 전체 적으로 static하..

[iOS 개발] UIPopoverController 의 EKEventEditViewController 키보드 문제

iOS5에서 PopoverController위에 EKEventEditViewController를 올려서 사용하다 보면 cancel 버튼이나 done 버튼을 통해서 나왔을때는 문제가 없지만, UIPopoverController의 바깥 공간을 선택했을때는 UIPopoverController가 사라져도 키보드가 내려가지 않는 문제가 발생한다. 해당 viewController의 view에 endEditing: 을 이용해 보아도 변화가 없다. 구글링을 통해서 일본사이트에서 해결 방법을 찾았다. 일본어는 번역기로도 꽤 읽을 만한 내용이 나온다. 해당 내용은 참고한 사이트에서 문제점을 수정하고 정리한 소스이다.- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverCont..

[iOS 개발] 현재 view의 모든 text editing 중단하기

textfeild 나 textView 등 text를 editing 하는 view를 만들다 보면키보드등 여러 문제로 골머리를 썩은 경험이 있을것이다.특히, resignFirstResponder를 통해서 해당 editing을 그만 두려고 해야할때,cell위에 사용하거나 여러 view가 중첩되어 해당 view의 객체를 컨트롤 하기 힘든경우가 발생할 수 있다.이때 해당하는 뷰의 모든 subview들의 editing을 그만 두도록 한번에 처리 할수 있는 메소드가 있다.[targetView endEditing:YES]; 위 처럼 해당 뷰의 메소드를 호출하게되면 모든 subview들에 있는 editing이 멈추게 된다. editing 때문에 올라와 있던 키보드들도 내려가게 된다.

[iOS 개발] 유용한 각종 UI controller open source 정리 사이트

iOS에서 쓰이는 기본적인 UI 컨트롤러 외에 좀더 편리한 Custom controller 를 구현하고자 한다면 다음 사이트를 먼저 찾아보고 해보기 바란다. http://www.cocoacontrols.com/ 해당 사이트는 custom으로 만들어 놓은 각종 컨트롤들이 open source로 공개되어 정리되어 있다.iOS 뿐아니라 Max OSX까지도 올려져 있다. 꽤나 많은 자료가 있고, 최근 유행하는 Custom controller들이 많이 올라와 있어서 아주 유용할것이다. 그리고 라이센스 별로 나누어져 있어서 이부분에서도 사용이 편리할 것이다.

[iOS 개발] 지역에 맞게 날짜 표기 하기

글로벌하게 앱을 배포하려 하다 보면 날짜 형식을 표시하는데 문제가 생긴다. 일반적으로 우리나라의 표기 방식은 "2012년 10월 5일 금요일" 이런식으로 표시 된다. 하지만 미국의 경우는 "Friday October 5, 2012" 로 표기 순서와 방식이 다르다 그외에 또 다른 나라는 그 나라만의 표기 방식이 있다. 하지만 이를 지원하기 위해 모든 지역의 표기 방식을 찾아서 따로 처리 할 수는 없는 노릇이다. 다행이도 이를 쉽게 적용할 수 있는 method가 존재한다. 위와 같이 날짜를 표기 할때 NSDateFomatter를 사용하게 될 것이다. 기본적인 사용법은 따로 언급하지 않겠다. 한국의 표기 법대로 위의 경우라면 "yyyy MMMM d EEEE" 정도가 될 것이다.이것을 현재 디바이스에 설정된 지..

[iOS 개발] iCloud keyValue Data Storage 사용

유니버셜 앱을 개발하여 배포할때 각 앱의 설정을 연동할때 유용하게 사용할 수 있는 iCloud keyValue Data Storage를 소개 해보려고 한다. 앱 내에서 iCloud 연동을 위한 설정은 아래 포스팅을 통해 진행하면 된다. http://hagulu.com/144 설정이 다되면 이를 이용하는 것은 매우 간단하다. NSUserDefault를 이용해 본 사용자라면 보자 마자 이해 할 수 있을것이다.NSUbiquitousKeyValueStore 라는 클래스를 통해서 쉽게 사용 할수 있다. NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; [store setBool:YES forKey:@"kUsrDefAskDele..

[iOS 개발] 간단한 animation 처리

iOS를 통한 개발에 animation은 꽤나 중요한 부분이다. iOS 특성상 부드러운 animation이 앱을 좀더 고급스럽게 만들어 주는데iOS를 이를 위해 아주 간단하게 animation을 쉽게 구현할수 있도록 해 놓았다.animation 전과 후의 View의 상태만 정해주면 그이외의 작업들은 모두 알아서 해준다.예제 코드를 보면서 설명을 해 보겠다. CGRect rect = targetView.frame; rect.origin.x = 300; targetView.frame = rect; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDelegate:self]; [UIView setAnimationDuration:0.3]; [UIVie..

[iOS 개발] UITableView 기본 delegate, datasource

UITableView 를 사용하다 보면 항상 기본적인 delegate와 datasource의 소스들을 다른 소스에서 긁어서 쓰고 있다.이참에 항상 쓰는 소스만 정리해서 올려 놓으려고 한다.#pragma mark - #pragma mark tableview delegate // 섹션의 갯수 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } // 각 섹션당 로우의 갯수 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the n..