아이폰 텍스트필드를 탭했을 때 나오는 키보드에 액세서리 뷰를 달아서 기타 콘트롤러를 붙일 수 있다.


import UIKit


class TextFieldWithAccessory: UITextField {


func makeAccessoryView(){

let numberToolBar : UIToolbar = UIToolbar(frame: CGRectMake(0, 0, self.frame.width, 40))

numberToolBar.barStyle = UIBarStyle.BlackTranslucent

let keyboardToolBarEmptySpace : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)

let keyboardToolBarDoneButton :UIBarButtonItem = UIBarButtonItem(title: "완료", style: UIBarButtonItemStyle.Done, target: self, action: "resignFirstResponder")

keyboardToolBarDoneButton.tintColor = UIColor.whiteColor()

numberToolBar.items = [keyboardToolBarEmptySpace,keyboardToolBarDoneButton]

numberToolBar.sizeToFit()

self.inputAccessoryView = numberToolBar

}

}


UIToolbar 인스턴스를 생성하고 프레임을 그린다음 왼쪽에 빈 공간을 채우고, 오른쪽 끝에 완료 버튼을 구성하는 코드이다.



WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
, 댓글  0개가 달렸습니다.
secret

swift로 프로그래밍 하면서 UILabel이나 UIText 등의 폰트 이름을 바꿀 때 폰트 패밀리 이름을 몰라서 헤맬 때가 있는데 아래 함수를 한번 돌려주면 콘솔에 폰트 패밀리 이름을 쭉 뿌려줘서 편함.


func printFonts() {

let fontFamilyNames = UIFont.familyNames()

for familyName in fontFamilyNames {

print("------------------------------")

print("Font Family Name = [\(familyName)]")

let names = UIFont.fontNamesForFamilyName(familyName )

print("Font Names = [\(names)]")

}

}


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
, 댓글  0개가 달렸습니다.
secret

step 1

우선 storyboard 에서 UIImageView 객체를 하나 집어넣고 적당힌 이미지를 입힌 다음 객체 속성에서 User Interaction Enabled를 체크해 준다.

그 다음 UIImageView 객체를 헤더 파일로 우클릭-드래그 해서 property로 선언하고 pinchGestureImage 로 이름짓는다.

이것으로 스토리보드에서 할일은 끝.


step 2

다음은 헤더에서 프로퍼티와 터치 입력이 발생했을 때 사용할 메서드를 선언해준다.


ViewController.h

--


#import <UIKit/UIKit.h>


@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIImageView *pinchGestureImage; //터치 제스쳐가 일어날 UIImageView

@property UIAlertView *myAlert; //액션이 일어났을 보여줄 팝업창


-(void)pinchEnabled:(UIPinchGestureRecognizer *)recognizer; //이미지를 핀치했을때 동작할 메서드


@end


--


step 3

다음은 구현부에서 메서드를 정의해준다.

(XCode에서 자동으로 생성하는 부분-[super viewDidLoad] 등-은 제외함)


ViewController.m

--


//property 들을 synthesize 해준다.

@synthesize pinchGestureImage;

@synthesize myAlert;


-(void)pinchEnabled:(UIPinchGestureRecognizer *)recognizer

{

if (recognizer.state == UIGestureRecognizerStateBegan) //UIPinchGestureRecognizer 객체의 상태가 '시작'상태일

{

myAlert = [[UIAlertView alloc]initWithTitle:nil message:@"Hello!" delegate:nil cancelButtonTitle:@"close" otherButtonTitles:nil, nil]; //팝업창의 속성을 이와 같이 정의하고

[myAlert show]; //팝업을 띄운다

}

}


- (void)viewDidLoad {

UIPinchGestureRecognizer *myPinchGesture = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchEnabled:)]; //myPinchGesture 라는 터치 제스쳐를 하나 만들고 init하면서 target self, 제스쳐를 입력받아 동작한다면 pinchEnabled: 메서드를 따르도록 한다.

[pinchGestureImage addGestureRecognizer:myPinchGesture]; //myPinchGesture pinchGestureImage 심는다.

}


@end


--


이제 시뮬레이터에서 앱을 빌드하면 아래와 같은 화면이 보인다.



그리고 이미지를 pinch 하면 팝업이 동작한다.



UIPinchGestureRecognizer 를 UILongTabRecognizer 등으로 교체하여 롱탭, 탭 등의 다른 제스쳐로도 응용 가능함.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
, 댓글  0개가 달렸습니다.
secret

UIGestureRecognizer 등의 방법을 쓸 수도 있으나

일단 ViewController에 아래 메소드를 입력하면 됨.


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

for (UIView * youtxtfl in self.view.subviews){

if ([youtxtfl isKindOfClass:[UITextField class]] && [youtxtfl isFirstResponder]) {

[youtxtfl resignFirstResponder];

}

}

}




WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
, 댓글  0개가 달렸습니다.
secret