Windows Phone 72012. 2. 8. 16:13

예를 들어 전화번호를 쓰는 textbox 가 3개가 있다고 정하자

010-xxxx-xxxx

만약 010을 쓰고 다음 textbox로 이동해야 하는데 그럴려면 중간번호 쓰는곳에 focus() 함수를 호출해야한다.

그리고 이것을 감자하기 위해서 textchanged 이벤트를 등록해야 한다.

그럼 textbox.TextChanged 이벤트를 등록하고 이동할 다음 textbox에 포커스를 등록하는등 이벤트가 엄청나게 많아지고

코드가 길어진다. 머 이것을 그냥 줄여보자.

젤 좋은 방법은

해당 Panel이 StackPanel이라면 Chidren으로 등록되어 있는 textbox의 이벤트를 한번에 등록하는 방법이 가상 이상적인 방법이지만 디자이너가 디자인을 끝낸상태라 StackPanel한개에 다 TextBox가 있는게 아니라 여러패널에 나뉘어져 있다.

그렇다면 수동적으로 일일히 코드에다가 다 써야 하는가?

그것보다는 좀 효과적으로 줄여보자.

public static class EventUtil
    {
        public static void AddFocusEvent(object Ctl1, object Ctl2)
        {
            if (Ctl1 is PhoneTextBox && Ctl2 is PhoneTextBox)
            {
                (Ctl1 as PhoneTextBox).TextChanged += (s, e) =>
                {
                    if ((Ctl1 as PhoneTextBox).Text.Length == (Ctl1 as PhoneTextBox).MaxLength)
                    {
                        (Ctl2 as PhoneTextBox).Focus();
                    }
                };
            }
            else if (Ctl1 is PhoneTextBox && Ctl2 is Button)
            {
                (Ctl1 as PhoneTextBox).TextChanged += (s, e) =>
                {
                    if ((Ctl1 as PhoneTextBox).Text.Length == (Ctl1 as PhoneTextBox).MaxLength)
                    {
                        (Ctl2 as Button).Focus();
                    }
                };
            }
        }
    }

 

사용법은

해당 페이지의 behind코드에

EventUtil.AddFocusEvent(VeteransNumTB, OkBtn);

이렇게 사용하면 된다.

textbox끼리의 focus이동과 textbox와 button과의 이벤트가 등록되어 있다.

이런 focus이벤트 등록할때는 꼭 KeyUp대신 textChanged로 해야 한다.

KeyUp이벤트로 하게 되면 사용자가 text로 가는순간 발생함으로 입력전에 focus가 변경된다.

Posted by 동동(이재동)
iPhone App2011. 9. 5. 20:46

일단 내가 하고 싶던건 로그인 페이지에서 텍스트 필드에 포커스가 가면 키보드가 뜨고

그외에 곳을 터치하면 키보드가 닫기는 그런 구현을 하고 싶었다.

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


{

[_userID resignFirstResponder];

[_userPW resignFirstResponder];

}

이렇게 touchesBegan 델리게이트를 이용해서 View를 터치할경우

resingFirstResponder로 focus를 잃게 했다.

Posted by 동동(이재동)
iPhone App2011. 8. 26. 16:44

나도 작가다 앱에서 로그인부분을 만들기 위해 페이스 북 로그인을 모방해 봤다.

페이스북은 항상 키패드가 떠 있는걸 보니 첫 id 입력 부분 textfiled에 focus를 강제로 두고 시작 했다.

방법은 간단하다.

- (void)viewDidLoad

{

[super viewDidLoad];

// Do any additional setup after loading the view from its nib.

[[self userID] becomeFirstResponder];

}


첫 로드 부분에 userID(이게 텍스트 필드랑 연결된 Outlet) 포커스를 가게 했다.


Posted by 동동(이재동)