Android App2015. 7. 22. 11:37

일단 커스텀 이벤트 등록


public interface MessageEventListener {

void onMessageEventListener(String msg);


}


이벤트를 보내기 위한 리스너 생성  (예: bc라는 클래스라고 하자)


public MessageEventListener mMessageListener;


public void setOnMessageListener(MessageEventListener listener){

mMessageListener = listener;

}



이벤트 받을 클래스에 리스너 등록

bc.setOnMessageListener(new MessageEventListener(){


@Override

public void onMessageEventListener(String msg) {

// TODO Auto-generated method stub

Log.i("CustomEvent", "Event Message : "+msg);

}

});



bc라는 클래스에서 이벤트를 호출 

mMessageListener.onMessageEventListener(msg);




Posted by 동동(이재동)
Windows Phone 82012. 10. 18. 11:18

원래 Generic 형식은 Global에서 사용이 되지 않았다.

 

하지만 .net framework 4.0 이상부터는 dynamic 을 지원한다. ㅋㅋ

 

윈폰7에서는 Compact net framework 라 안되었지만 windows 8 phone은 강력해졌다.

 

예를 들어 이렇게 Webclient 에서 Json Data를 받으면 알려주는 제네릭 Event Handler를 만들었다고 하자

 

public class CompleteEvent<T>
   {
       public event EventHandler<JsonDataEventArgs<T>> completeEvent;
 
       public void JsonDataEvent(T jsonData)
       {
           EventHandler<JsonDataEventArgs<T>> temp = completeEvent;
           if (temp != null)
           {
               temp(this, new JsonDataEventArgs<T>(jsonData));
           }
       }
   }
 
   public class JsonDataEventArgs<T> : EventArgs
   {
       T _jsonDataDict;
 
       public JsonDataEventArgs(T data)
       {
           _jsonDataDict = data;
       }
 
       public T XmlData
       {
           get
           {
               return _jsonDataDict;
           }
           set
           {
               _jsonDataDict = value;
           }
       }
   }

 

이제 이것을 전역변수로 정의 해보자

 

api.cs에

 

public CompleteEvent<dynamic> ce = new CompleteEvent<dynamic>();

 

이렇게 되면 이 클래스의 CompleteEvent를 어디서든 사용할 수가 있다 CompleteEvent<T>형식으로는 전역변수를 사용할수가 없다

Posted by 동동(이재동)
silverlight2012. 8. 27. 12:48

더블클릭시 클릭 이벤트가 2번 일어나기때문에

 

시간차를 줘서 이벤트가 2번 일어나지 않도록 변경

 

더블클릭해도 두번째 클릭은 return 되기때문에 한번 클릭한 효과과 동일한 효과를 낸다.

 

       System.Windows.Threading.DispatcherTimer timer;
        bool singleClick = false;

 

        /// <summary>
        /// 로드 이벤트
        /// </summary>
        private void CIFControl_Loaded(object sender, RoutedEventArgs e)
        {
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(500);
            timer.Tick += new EventHandler(timer_Tick);

         }

        void timer_Tick(object sender, EventArgs e)
        {
            timer.Stop();
            singleClick = false; // expires
        }
       

private void btnOK_Click(object sender, RoutedEventArgs e)
        {
            if (!singleClick)
            {
                timer.Start();
                singleClick = true;
                Debug.WriteLine("Click");
            }
            else
            {
                Debug.WriteLine("Double Click");
                return;
            }

      }

'silverlight' 카테고리의 다른 글

심플한 MVVM 패턴 스타일 ~  (0) 2010.05.19
[silverlight] silverlight 3 정식버전 설명 정리한거  (0) 2009.07.13
졸작때 쓴 파일들  (0) 2008.12.18
내 졸작 제출용 파일  (0) 2008.10.29
silverlight rc1 정식버전  (0) 2008.10.15
Posted by 동동(이재동)
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. 23. 10:42
여러가지 방법을 해보았다.

물론 Custom Cell Class에서 Action을 걸어서 하는 방법이 있지만 나는 TableView가 있는 클래스의 Data Array를 사용해야만 했기때문에

TableView가 있는 Class에서 Action을 받고 싶었다. (이것도 여러가지 방법으로 해봄)

일단 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{   

    BoardCustomCell *cell = (BoardCustomCell *)[tableView dequeueReusableCellWithIdentifier:BoardCustomCellIdentifier];

    

    // NSUInteger row = indexPath.row;

    

if(cell == nil)

{

        cell = [BoardCustomCell cellWithNib];

}        

    

    NSMutableDictionary* commentData = (NSMutableDictionary*)[commentDataArray objectAtIndex:indexPath.row];    

    cell.contentLabel.text = [commentData objectForKey:@"CmtContent"];

    cell.memberNameLabel.text = [commentData objectForKey:@"MemberName"];    

    cell.dateLabel.text = [commentData objectForKey:@"CreateDate"];

    cell.memberLevelLabel.text = [commentData objectForKey:@"PntSumLv"];

    cell.memberPointLabel.text = [commentData objectForKey:@"ReCmdCount"];


    

    UIImage *image = [UIImage   imageNamed:@"delbtn.png"];    

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

    CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);

    button.frame = frame;

    [button setBackgroundImage:image forState:UIControlStateNormal];    

    [button addTarget:self action:@selector(checkButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];    

    cell.accessoryView = button;


아래처럼 cell.accesooryView에 버튼 생성해서 넣었다.  

액션 셀렉터에서

- (void)checkButtonTapped:(id)sender event:(id)event

{

    NSSet *touches = [event allTouches];

    UITouch *touch = [touches anyObject];

    CGPoint currentTouchPosition = [touch locationInView:commentTableView];

    NSIndexPath *indexPath = [commentTableView indexPathForRowAtPoint: currentTouchPosition];

    NSMutableDictionary* commentData = (NSMutableDictionary*)[commentDataArray objectAtIndex:indexPath.row];   

    

    NSString* cmtIdx= [commentData objectForKey:@"CmtIdx"];


    [self performSelector:@selector(sendSympathy:) withObject:cmtIdx afterDelay:0.5];

}


이렇게 구현을 했다.
 

참고 :http://www.edumobile.org/iphone/iphone-programming-tutorials/impliment-a-custom-accessory-view-for-your-uitableview-in-iphone/
 
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. 7. 19. 16:26

viewdidload에 이런식으로 추가하고


action쪽에 onadd를 등록했다.


- (void)viewDidLoad

{

[super viewDidLoad];

  

UIBarButtonItem* toAdd=[[UIBarButtonItem alloc] initWithTitle:@"음식 추가" style:UIBarButtonItemStylePlain target:self action:@selector(onAdd)];

self.navigationItem.rightBarButtonItem = toAdd;

   [toAdd release];

.

.

}

그리고 이렇게 아까 action에 쓴 onAdd 메소드를 구현하면 된다.

- (void)onAdd

{

NSLog(@"hi");

}

Posted by 동동(이재동)
iPhone App2011. 6. 17. 14:34

음 이것저것 해보았지만 역시 잘 정리된 사이트가 별로 없었다.

 

자 내가 한번 해보자.

 

이번 목표는 버튼을 클릭했을 때 웹 페이지를 띄우는 것과 Label Text를 변경하는 것이다.

 

일단 난 돈이 없어서 xcode 3.2로 했다. xcode4 빨리 받아야 될텐데

 

일단 하는법은 View-based Application으로 프로젝트를 하나 만든후

 

확장자가 xib가 되어있는 것을 더블 클릭한다. 그러면 View가 뜰것이다.

 

여기서 Label이랑 Button을 하나씩 추가 한다.

 

자 이제 ViewController.h 헤더 파일에서 label과 button을 설정한다.

 

#import <UIKit/UIKit.h>
 
@interface TestHelloWorldViewController : UIViewController {
    IBOutlet UILabel  *myLabel;        
}
@property (nonatomic,retain) IBOutlet UILabel *myLabel;
 
-(IBAction) onGotoTest;
@end

 

인터페이스에 IBoutlet UILabel 에 myLabel이라는 것을 하나 설정하고

@property로 똑같이 하나 잡는다.

 

Label은 이걸로 끝~

 

버튼은 더 간단하다

-(IBAction) onGotoTest로 버튼 이벤트? Action을 정한다.

 

자 코딩을 마쳤으면 다시 View로 돌아가자 View로 돌아가서 헤더에서 만든것을 연결해보자.

 

xib를 클릭하여 view를 보고 일단 내가 만든 버튼에서 오른쪽 버튼을 누르면 Rounded Rect Button이라는 팝업창이 하나 뜬다. 여기서 우리는 터치를할것이니 Touch Up inside에 옆에 동그라미를 마우스로 끌어서 File’s Owner에 집어 넣자

그럼 아까 내가 헤더에서 만든 onGotoTest Button Action을 선택할수 있다. 그러면  끝이다.

 

이번에는 라벨을 컨트롤 하기 위해서 label에서 오른쪽 버튼을 누른후 new referenciong Outlet 옆에 있는 동그라미를 끌어서 file's Owner에 집어 넣는다. 그러면 다시 헤더에서 만들었던 myLabel이 보일것이다 선택하면 두개의 연결은 끝~

 

자이제 실제로 Controller.m에 직접 코딩을 해보자.

 

@synthesize myLabel;
 
-(IBAction)onGotoTest{
    //NSURL *url = [NSURL URLWithString:@"http://www.naver.com"];
//    [[UIApplication sharedApplication] openURL:url];
    myLabel.text=@"jaedong";
     
}

 

@synthesize로 myLabel을 정의 한후

onGotoTest이벤트가 발생하면 즉 버튼이 클릭되면 myLabel 의 Text를 바꾸 었다.

 

흠… 쓰다보니 기초지식이 너무 없네… 일단 object-c부터 파야겠다.

 

아무튼 20분만에 첫 예제 프로그램을 만들어서 기쁘다…!!

 

참고: http://iphoneappsmaker.tistory.com/713

Posted by 동동(이재동)
Windows Phone 72010. 10. 10. 17:55

일단 내가  처리해야 할 문제는 그것이였다.

 

트위터에서 로그인이 Success가 됬는지 안됐는지 체크 하는거였는데 이게 타이머로 되어있어서(LG DLLㅠ.ㅠ)

 

그래서 Success 여부를 판단하여 UI 즉 VIew딴을 바꾸는것이였다.

 

일단 Twitter Manager 클래스가 있고 거기에서 성공하면 클래스를 호출한곳(즉 VIew딴) 에서 성공이 되었는지 안되었는지  아는 방법이다.

 

즉 아주 쉽게 말해서

 

A라는 Class 가 있고 그안에 Test라는 Bool형 변수가 있는데 이것이 변경이 될때 그때 이벤트가 발생하여 알려주는것이다.

 

일단 이벤트를 발생해야 하기 때문에 살펴보자 나는 bool을 이용하였지만 샘플은 string을 이용했다(똑같다)

 

이벤트 args를 만들자

 

MyEventArgs.cs

 
    public class MyEventArgs : EventArgs
    {
        private string msg;
 
        public MyEventArgs(string messageData)
        {
            msg = messageData;
        }
        public string Message
        {
            get
            {
                return msg;
            }
            set
            {
                msg = value;
            }
        }
    }

 

 

그리고 이 이벤트를 등록하는   쿨래스를 만들자.

 

HasEvent.cs

public class HasEvent
    {
        public event EventHandler<MyEventArgs> sampleEvent;
 
        public void DemoEvent(string val)
        {
            EventHandler<MyEventArgs> temp = sampleEvent;
            if (temp != null)
            {
                temp(this, new MyEventArgs(val));
            }
        }        
    }

 

이제 SampleEvent가 등록되었으니 일반 이벤트랑 똑같이 쓰면 된다~ 와우

 

이 이벤트를 사용하는 예제를 보자

 

MainPage.cs

 

public partial class MainPage : PhoneApplicationPage
   {
       // Constructor
       public MainPage()
       {
           InitializeComponent();
           HasEvent he = new HasEvent();
           he.sampleEvent += new EventHandler<MyEventArgs>(he_sampleEvent);
           he.DemoEvent("true");            
       }
 
       void he_sampleEvent(object sender, MyEventArgs e)
       {
           MessageBox.Show(e.Message);
       }
   }

 

이렇게 이벤트를 줘서 만약 내가 어떤 시기에 특정 메소드를 실행시키고 싶거나 변경하고 싶다면

 

이렇게 이용하면 된다.

 

참고  :  http://msdn.microsoft.com/ko-kr/library/db0etb8x.aspx

'Windows Phone 7' 카테고리의 다른 글

[wp7] Localization Resource 국제화 하는법  (0) 2010.10.19
[wp7] 람다식을 잘쓰자.  (0) 2010.10.18
[wp7] viewbox  (0) 2010.10.08
[wp7] behind에서 application bar 만들기  (0) 2010.10.07
[wp7] Enum 정리  (0) 2010.10.05
Posted by 동동(이재동)