각각의 컨트롤러에 XIB를 만들지 않고 한 곳에(보통 AppDelegate가 되겠음..) 공통으로 만든 후
여러 페이지에서 쓸 수 있다.
네비게이션 바 처럼 여러 컨트롤러에 공통으로 쓰이는 컴포넌트는 이 메서드를 이용해
공통 UI 에 액션을 적용 시킬 수 있다.
Ex)
AppDelegate에 다음과 같이 선언..
UIButton * NaviButton[3];
UIView * m_view;
UITextField *tf;
[NaviButton[0] addTarget:self action:@selector(eventHome) forControlEvents:UIControlEventTouchUpInside];
[NAviButton[1] addTarget:self action:@selector(eventMenu) forControlEvents:UIControlEventTouchUpInside];
[m_view addTarget:tf action:@selector(eventNaviOk) forControlEvents:UIControlEventTouchUpInside];
실제 각 컨트롤러에서 @selector로 보낸 메서드(메세지) 들을 재정의 해주면 된다.
- (void) eventHome
{
// 재정의
}
- (void) eventMenu
{
// 재정의
}
- (void)eventNaviOk
{
// 재정의
ESignItemDetailCont
roller *hESignItemDetailController = [[ESignItemDetailController alloc]initWithNibName:@"ESignItemDetailController" bundle:nil];
[self.navigationController pushViewController:hESignItemDetailController animated:YES];
[hESignItemDetailController release];
}
Ex)
statePicker1 = [[CustomArrayPickerView alloc] init]; // 피커를 만듦
//valueStateChange1 메서드
- (void)valueStateChange1:(CustomArrayPickerView*)arrayPicker
{
if([self.appDelegate.calledFromWhere isEqualToString:@"1"]){
searchLbl.text = [arrStateData1 objectAtIndex:arrayPicker.selectedRow];
}else{
searchLbl.text = [arrStateData2 objectAtIndex:arrayPicker.selectedRow];
}
}
[statePicker1 addTarget:self action:@selector(valueStateChange1:)
forControlEvents:UIControlEventValueChanged];