2013 이전/iOS개발

[iPhone 개발] UIImageView 이벤트 처리

hagulu 하구루2017. 2. 25. 16:00

UIImageView에 touch 이벤트를 등록하려면


" userInteractionEnabled " 이라는 property를 YES로 해주어야 한다.

대부분의 view들이 저 값이 default로 YES로 설정되어 있지만,  UIImageView는 무슨 이유에선지

default로 NO가 설정되어 있다.


따라서 UIImageView에 touch이벤트를 등록하고 싶다면 위 property를 변경해주어야 할것이다.



본인도 이거 하나때문에 온갖 뻘짓을 한기억이 있다.


댓글

댓글쓰기 폼

2013 이전/iOS개발

[iPhone 개발] 전화 번호 -(대쉬) 규칙 적용 함수

hagulu 하구루2017. 2. 25. 15:59


voip 앱을 만들다가 필요에 의해서 직접 아이폰 전화 어플에 전화 번호 하나하나 넣는 노가다를 통해서 확인하여 기본적인 국내 통화의 대쉬 규칙을 리스팅하여 함수로 만들었다.


규칙은 아래와 같다


  • 1로 시작하는 세자리까지 대쉬 없음
  • 2로 시작하는 번호는 1-3-4 1-4-4
  • 0으로 시작하는 번호
    • 02로 시작하는 번호 2-3-4, 2-4-4
    • 013로 시작하는 번호 4-3-4, 4-4-4
    • 015로 시작하는 번호 5-4
    • 010, 011, 012, 016, 017, 018, 019로 시작하는 번호 3-3-4, 3-4-4
    • 그외에 0으로 시작하는 번호 3-3-4
  • 0또는 2외에 시작하지 않는 경우
    • 15, 16, 17, 18, 19로 시작하는 경우 4-4
      • 15를 제외한 나머지는 8자리 이상일떄 2-3-4- 2-4-4
    • 그외의 경우 2-3-4 2-4-4


소스는 아래와 같고 사용법은

+ (NSString *) makePhoneNumber:(NSString*) phoneNumStr;


요 메소드에 대쉬가 없는 전화 번호를 NSString 형태로 넣어주면 대쉬가 붙어서 NSString으로 return 해준다.

Global이라는 class 안에서 구현되었다.


// 뒷부분이 3-4 인경우 스트링 만들어줌

+ (NSString *) make34:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt  {
 
    if([phoneNumStr  length] > headCodeCnt && [phoneNumStr  length] <= headCodeCnt + 3) {
 
        return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]];
 
    } else if ([phoneNumStr length] > headCodeCnt + 3 && [phoneNumStr  length] < headCodeCnt + 8) {
 
        return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], 

                [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 3)], [phoneNumStr substringFromIndex:headCodeCnt + 3]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 



// 뒷부분이 3-4 4-4 인경우 스트링 만들어줌
 
+ (NSString *) make34_44 :(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt{
 
    if([phoneNumStr  length] > headCodeCnt && [phoneNumStr  length] < headCodeCnt + 8) {
 
        return [self make34:phoneNumStr withHeadCodeCnt:headCodeCnt];
 
    } else if ([phoneNumStr  length] == headCodeCnt + 8) { 

        return [NSString stringWithFormat:@"%@-%@-%@", [phoneNumStr substringToIndex:headCodeCnt], 

                [phoneNumStr substringWithRange:NSMakeRange(headCodeCnt, 4)], [phoneNumStr substringFromIndex:headCodeCnt + 4]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 

// 두개로 
 
+ (NSString *) makeHalf:(NSString *)phoneNumStr withHeadCodeCnt:(NSInteger) headCodeCnt {
 
    
 
    if([phoneNumStr length] > headCodeCnt && [phoneNumStr length] <= headCodeCnt + 4) {
 
        return [NSString stringWithFormat:@"%@-%@", [phoneNumStr substringToIndex:headCodeCnt], [phoneNumStr substringFromIndex:headCodeCnt]];
 
    } else {
 
        return phoneNumStr;
 
    }
 
}
 
+ (NSString *) makePhoneNumber :(NSString *)phoneNumStr {
    
    NSArray* specialCode334_344 = [[[NSArray alloc] initWithObjects:@"010", @"011", @"012", @"016", @"017", @"018", @"019", 
                          @"070",nil] autorelease];
    
    NSArray* specialCode44 = [[[NSArray alloc] initWithObjects:@"15", @"16", @"17", @"18", @"19", nil] autorelease];
    
    if([phoneNumStr hasPrefix:@"1"] && [phoneNumStr length] <= 3) {
        return phoneNumStr;
    } else if([phoneNumStr hasPrefix:@"2"]) {
        return [Global make34_44:phoneNumStr withHeadCodeCnt:1];
    } else if([phoneNumStr hasPrefix:@"0"]) { // 0으로 시작되는 번호
        if([phoneNumStr length] > 2 && [phoneNumStr hasPrefix:@"02"]) {   // 02로 시작되는 번호 2-3-4 2-4-4 규칙
            return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
        } else if([phoneNumStr length] > 3){ // 판별 코드가 3자리
            if([phoneNumStr hasPrefix:@"014"]) { // 014경우 아애 안한다
                return phoneNumStr;
            } else if([phoneNumStr hasPrefix:@"013"]) { // 013경우 4-3-4 4-4-4
                return [Global make34_44:phoneNumStr withHeadCodeCnt:4];
            } else if([phoneNumStr hasPrefix:@"015"]) { // 015경우 5-4
                return [Global makeHalf:phoneNumStr withHeadCodeCnt:5];
            } else if([specialCode334_344 indexOfObject:[phoneNumStr substringToIndex:3]] != NSNotFound) { // 3-3-4 3-4-4 규칙
                return [Global make34_44:phoneNumStr withHeadCodeCnt:3];
            } else {
                return [Global make34:phoneNumStr withHeadCodeCnt:3];
            }
        } else {
            return phoneNumStr;  
        }
    } else { // 그외의 숫자로 시작할경우 
        if([phoneNumStr length] > 2) {
            if([specialCode44 indexOfObject:[phoneNumStr substringToIndex:2]] != NSNotFound) { // 4-4 규칙 
                if(![phoneNumStr hasPrefix:@"15"] && [phoneNumStr length] > 8) { // 15 로 시작하는경우가 아니면  8자리 이상 다시 처리
                    return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
                } else {
                    return [Global makeHalf:phoneNumStr withHeadCodeCnt:4];
                }
            } else { // 두개로 나눠지는 경우가 아닌 경우 대부분
                return [Global make34_44:phoneNumStr withHeadCodeCnt:2];
            }
        } else {
            return phoneNumStr;
        }
        
    }
}


댓글

댓글쓰기 폼

2013 이전/iOS개발

[iPhone 개발] UITableViewCell 이벤트관리 메소드

hagulu 하구루2017. 2. 25. 15:59

UITableView를 사용하다보면 각 셀에 이벤트를 cell단위로 관리하고 싶을 것이다.


이를 위함 메소드들이 UITableViewCell에 있다.


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setEditing:editing animated:animated];

if(selected) {
 // 선택 되었을때
} else {
// 선택 되지 않앗을때
}
}

해당셀의 선택 여부에 따라 호출되는 메소드로 selected 를 통해서 선택 되었을때와 안 되었을때를 구분하여 cell을 관리 할수 있다.

참고로 selected는 tap이 모두 이루어 진게 되는 상태를 말한다.
따라서 Highlight  를 처리하는 메소드가 따로 있다.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated

사용법은 위와 같다.

그리고 테이블 삭제를 할때 오른쪽에 삭제 버튼이 생기는 edit 상태일떄를 처리하는 메소드도 제공한다


- (void)setEditing:(BOOL)editing animated:(BOOL)animated

이 세개의 메소드는 보는것처럼 쉽게 이용할수 있다.


그외에 tableView에서 여러 셀을 동시에 편집하는 화면에서 왼쪽 (-) 처럼 생긴 것을 터치했을때 오른쪽에 삭제 버튼이 나타나는 상황을 캐취하는 메소드 또한 있다.

무슨말일까.. 저위에말.. ㅋㅋ


- (void)didTransitionToState:(UITableViewCellStateMask)state {

    [superdidTransitionToState:state];

    

    if(state & UITableViewCellStateShowingDeleteConfirmationMask) {

  // 삭제버튼이 나타 낫을때

    } else {

 // 삭제버튼이 없을때

    }

}


셀의 변화가 일어 낫을때 불리는 메소드로 의심이 되는데 굳이 상세히짚고 넘어갈 마음은 없다.

if(state & UITableViewCellStateShowingDeleteConfirmationMask)  이부분이 어떤 원리로 작동하는 지는 모르겠다.. 구글링과 나의 껴 마추기로 찾은 조합이니 다른데서 오작동을 할가능성은 다분하다. 


이정도만 활용해도 tableView의 셀의 이벤트에 대응할수 있을것이다.



댓글

댓글쓰기 폼

2013 이전/iOS개발

[iPhone 개발] superview 혹은 superview 의 ViewController object 얻어 오기

hagulu 하구루2017. 2. 25. 15:58

UIView를 따로 빼서 사용하다 보면 superview에 접근해야 하는 일이 자주 발생한다 .


이때 간단히

self.superview
를 통해서 object를 얻어와 작업을 할수 있다.

또한, superview의 ViewController에 접근하고 싶다면

[self.superviewnextResponder]

를 통해서 쉽게 object를 얻어 올수 있다.

이때 superview는 viewController의 view 이어야 한다.


제대로 참조되지 않는다면 nextResponder에대해서 알아보고, 다른 방법을 찾아 봐야 할것이다.


댓글

댓글쓰기 폼

끄적끄적

이전 합니다.

hagulu 하구루2016. 12. 23. 13:03

기존에 쓰던 설치형이 봇들의 공격이 너무 심하고 

싸구려 호스팅을 쓰다보니 트래픽 제한이 너무 심해서 


티스토리로 갈아 탑니다


시작 합니다. 

'끄적끄적' 카테고리의 다른 글

이전 합니다.  (0) 2016.12.23

댓글

댓글쓰기 폼

hagulu.com

.....

VISITED

Today : 0

Total : 180,227

Lately Comment